精华内容
下载资源
问答
  • // 第三步,sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short XSSFRow row = sheet.createRow((int) 0); sheet.setDefaultColumnWidth((short) 15); /**--------------------------...
  • 帆软报表实现点击表头排序功能 FINEREPORT实现跟EXCEL表格一样的,点击表头升降序功能,效果见下图 ...记得两个参数之间要加个空格 再添加一个参数模板,用来把箭头传进去 二、设置单元格 ...

    帆软报表实现点击表头排序功能

    FINEREPORT实现跟EXCEL表格一样的,点击表头升降序功能,效果见下图
    示例:(点击字段切换升降序)
    在这里插入图片描述

    如何实现

    一、创建一个数据查询,并添加数据集参数

    select * from  `purchase_order`order by ${columns} ${sort}
    

    记得两个参数之间要加个空格
    在这里插入图片描述
    再添加一个参数模板,用来把箭头传进去
    在这里插入图片描述
    二、设置单元格
    在标题单元格中插入公式:“订单号(你要定义的标题)” + if($columns = “purchase_no(实际数据集中的对应字段名)”, $flag, “”)
    在这里插入图片描述
    设置标题单元格属性
    右击订单号单元格,选择超链接——添加动态参数
    在这里插入图片描述
    添加图中的三个参数

    参数
    sort =if($sort=“desc”,“asc”,“desc”)
    sort purchase(标题对应的数据集字段名)
    flag =if($flag=“↓”,“↑”,“↓”)

    至此 预览一下,大功告成(撒花✿✿ヽ(°▽°)ノ✿)!

    展开全文
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    如何在EXCEL中快速定位最后一行数据 用SUN函数快速求和 在Excel中快速查看所有工作表公式 在Excel中设置行间距 怎样同时改变多行行高 快速换行 让文本换行 在Excel中行列快速转换 将原有列中的内容倒置过来 快速回到...
  • excel的使用

    2012-11-25 17:06:01
    存放数据格式为“x,y”的形式,首先在Excel中输入坐标值,将x坐标值放入A列,y坐标值放入到B列,然后利用“&”将A列和B列合并成C列,在C1中输入:=A1&","&B1;,此时C1中的数据形式就符合要求了,再用鼠标向下拖动...
  • 如何在EXCEL中快速定位最后一行数据 用SUN函数快速求和 在Excel中快速查看所有工作表公式 在Excel中设置行间距 怎样同时改变多行行高 快速换行 让文本换行 在Excel中行列快速转换 将原有列中的内容倒置过来 快速回到...
  • 作了18分类, 而函数向导对话框中也新增100左右新的函数,用于扩展Excel的计算功能。且所有功能都通用于 Excel 2002、2003和2007、2010。支持中英文显示与繁简体操作系统、拥有30多款华丽的皮肤界面,支持Excel...
  • 首先将表头存在一List中,在读数据的时候,获取相应的列的数据,用反射注入到实体中,在加到List中返回即可 Excel解析类 目前仅针对,String类型的类,进行了操作,其他类型尚没有写,优化也尚未进行 //对一张表,...

    概述

    使用POI读取Excel中的数据,使用Java反射将数据映射到实体中,有一个不好的地方是就是表头的第一行需要定义为属性名,还没有想到如何解决,先这样把

    来看,思路

    在这里插入图片描述

    首先将表头存在一个List中,在读数据的时候,获取相应的列的数据,用反射注入到实体中,在加到List中返回即可

    Excel解析类

    目前仅针对,String类型的类,进行了操作,其他类型尚没有写,优化也尚未进行

    //对一张表,进行实体映射
        private static <T> List<T> readExcel(Class<T> classzz,Workbook workbook) throws Exception {
    
    
            Sheet sheet = workbook.getSheetAt(0);
    
            //获取最后一行
            int lastRowNum = sheet.getLastRowNum()+1;
            //获取最后一列
            int lastCellNum = sheet.getRow(0).getLastCellNum();
            //获取实体类字段
            Field[] fields = classzz.getDeclaredFields();
    
            Row row = null;
    
            List<String> headList = new ArrayList<>();
    
            //一行存为一个Obj,放在List中
            List<T> beans = new ArrayList<T>();
    
            //获取表头放在list中
             for (int j=0;j<lastCellNum;j++){
                 row = sheet.getRow(0);
                 Cell cell = row.getCell(j);
                 //均格式化为字符串
                 DataFormatter formatter = new DataFormatter();
                 String value = formatter.formatCellValue(cell);
                 headList.add(value);
              }
    
    
             for (int i=1;i<lastRowNum;i++){
    
                 //通过class创建实体对象
                 T instance = classzz.newInstance();
                 for (int j=0;j<lastCellNum;j++){
    
                     row = sheet.getRow(i);
                     Cell cell = row.getCell(j);
                     DataFormatter formatter = new DataFormatter();
                     String value = formatter.formatCellValue(cell);
    
                     String headName = headList.get(j);
    
                     for (Field field : fields){
    
                         if (headName.equalsIgnoreCase(field.getName())){
    
                             String methodName = MethodUtils.setMethodName(field.getName());
                             Method method = classzz.getMethod(methodName,field.getType());
                             //注入值
                             method.invoke(instance,value);
                         }
    
                     }
    
                 }
    
                 beans.add(instance);
    
             }
    
             return beans;
    
        }
    
    //内部静态类
        static class MethodUtils {
            private static final String SET_PREFIX = "set";
            private static final String GET_PREFIX = "get";
            private static String capitalize(String name) {
                if (name == null || name.length() == 0) {
                    return name;
                }
                //set+首字母大写 比如setSid
                return name.substring(0, 1).toUpperCase() + name.substring(1);
            }
            public static String setMethodName(String propertyName) {
                return SET_PREFIX + capitalize(propertyName);
            }
            public static String getMethodName(String propertyName) {
                return GET_PREFIX + capitalize(propertyName);
            }
        }
    
    

    在这里插入图片描述

    在这里插入图片描述

    pom

     <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
            </dependency>
    
    展开全文
  • VC++(VS2010)读写Excel文件代码(附示例)

    千次下载 热门讨论 2014-11-22 13:27:24
    //添加sheet,新的sheet前,也就是序号为1 Excel_example.CreateSheet(csSheetName); Excel_example.CreateSheet(csSheetName2); //操作最开始添加的sheet:(newSheet) Excel_example.SetSheet(2); ...
  • 水晶报表--excel(下)

    2011-12-12 09:06:00
    本文上文的基础上,实现类Excel的一操作,就是单元格横向和纵向合并。以及底色的效果,如下图 以前文的基础进行改造 1:横向单元格合并 删除掉后表头最后一文本项 然后把前一项目拉到与...
      主要讲解了如何做一个基础的到处样式,

    本文在上文的基础上,实现类Excel的一个操作,就是单元格横向和纵向合并。以及加底色的效果,如下图


    以前文的基础进行改造

    1:横向单元格合并

    删除掉后表头最后一个文本项


    然后把前一个项目拉到与最后一个字段等宽,注意右边要对齐


    预览一下


    导出效果


    很简单吧,呵呵

    2:纵向合并

    我们仅以第一列为例,每三行合并做一次合并。
    其原理是这样的:
    根据数据序号,当是3的倍数的时候,线条显示。如果不是3的倍数,线条就不显示。

    示意图

    在一个3行的区块内,把蓝色标识的两条线拿掉。

    可能你不是太理解,继续往下看
    选中第一列,点右键,格式化对象,在“边框”标签页上设置底边的边框后面的公式



    上面绿色的注释是原来自带的
    特别说明一下,考虑到可能数据不是3的倍数,那么最后一行可能就是空白了(线条被抑制显示掉了)
    所以增加了一个onlastrecord的保护
    onlastrecord是水晶报表中最后一条记录的标识。

    设置好后看预览效果,我做了放大。注意每个行之间有个缝隙。
    这就是这个方案的缺点。这个缝隙,就是我们线条设置为CrNoline后的空隙。
    因为第1个字段跟后面的字段是等高的(包含边框的高度),去掉边框后,它就比后面的字段少了一条线的高度
    于是空隙就出来了


    (此问题在本文的最后已经得到完善)

    导出来看一下,效果还是很好的,呵呵


    合并单元格里的内容我没有改,因为这个数据不是太合适。
    这个可进一步参考我之前写的《如何实现中式报表的组名合并风格

    3:加底色

    按住Ctrl,选中详细资料节中要加底色的列。在其中一列上点右键
    进入到图中所示的界面上,勾选背景色。点“更多”,选择一个合适的颜色


    注意色盘中的颜色,右侧可以看到RGB值,记录下来 255,255,128


    然后点确定,这时候所有的行都染色了。而且会出现压线的情况(部分竖线不见了)
    先不管,先按照之前,把后面的字段依次移动到底层


    然后继续将颜色限定在第3行,再次选中这几个字段,点右键,在出来的界面上,编辑"背景"后面的公式(x+2)

    3的倍数的行上显示我们要的颜色,否则就不显示背景色,预览效果如下


    再后面就简单了,在报表页脚上增加一个汇总和一个文本框,设置边框为:下右

    设置好对齐(可参考前文的方法),然后设置其背景为我们要的颜色
    预览效果如下


    导出效果如下


    有时候我们会发现,有些地方怎么对都对不齐,比如我们这个图,放大一点也可以看出来

    而实际上,导出来的效果仍然是好的,这是设计器本身的问题

    说明:
    有时候对齐确实很困难,可以用设定属性的方法来更精确的定位,就是麻烦一些
    点中某一字段,看属性里面,可以设置其:Top,width,Left,Height
    注意这个Top是从每个节的左端点开始算起的,不是整个报表的左端点。


    版本修订:
    20090709:
    很意外,没想到这个方案的最大问题,就是有间隙的问题,竟然被解决了。。。
    解决方法:
    因为线条在世纪导出Excel的时候是不导出的,
    所以用在原来有空隙的位置上覆盖一条线,盖住原来的缝隙,


    注意线条的起始端点位置。

    显示效果如下:


    这样既保证了显示效果,又不影响导出效果,非常不错。
    (PS:
    这个方法不是我想出来的,是SAP的技术人员想出来的,
    最近SAP派了几员大将来解决历史遗留问题,看来我也终于能更新更新知识了。呵呵~~)


    展开全文
  • 我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一对话框工程,命名为VCExcel。  我们要...

    我们制作应用软件的时候,经常要把结果以报表的形式输出,当前使用较为广泛的当然是Excel表格,本文简略介绍在VC++6.0中如何使用Excel2003的库函数并对其进行编程。先创建一个对话框工程,命名为VCExcel。

     我们要编程输出一个如下表格。

      格式如下:

      1、表头的字体为宋体,加粗,颜色为白色,底色为深蓝,垂直水平居中对齐;

      2、表中正文内容字体为宋体,颜色为深蓝,底色为灰色,垂直水平居中对齐;

      3、全部边框,文本自动换行。

      在BOOL CVCExcelApp::InitInstance()之中,int nResponse = dlg.DoModal()语句之后加入如下代码:

      if(CoInitialize(NULL)==0)//初始化COM库

      {

      AfxMessageBox("初始化COM失败!");

      exit(1);

      }

      在return FALSE;语句之前加入:::CoUninitialize();//释放COM库。

      为了能调用Excel的接口我们打开MFC ClassWizard->Automation->Add Class->From a type library,选择[Excel的安装路径]\EXCEL.exe,然后把所有的类都添加进去,头文件为excel.h,源文件为excel.cpp。当然,你也可以只把一些比较常用的类如_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加进去,因为网上流传的绝大部分教程都只添加这几个类,这完全根据你个人的需要。但在本例中我们至少还要用到Interior类(设置底色),Font类(设置字体),而且这样做又简单又方便扩展功能,不管三七二十一全部弄进去吧!但这样做会有一个问题,有可能产生类的名字冲突,例如本来你自己写了一个类叫Font,当你全部添加时又再次加入了Font类,这样就重复定义了,不过可以通过名字空间来解决这个问题。再在VCExcelDlg.cpp文件的头部添加(如果系统已经自动添加就不要重复添加了):

      #include "VCExcel.h"

      #include "comdef.h"

      这样一来我们的程序就可以自由调用EXCEL了,一切准备就绪。

      下面先在CVCExcelDlg中添加如下成员变量,用来操控Excel应用程序、工作簿和单元格。

      Range m_ExlRge;

      _Worksheet m_ExlSheet;

      Worksheets m_ExlSheets;

      _Workbook m_ExlBook;

      Workbooks m_ExlBooks;

      _Application m_ExlApp;

      我们利用加载Excel模板来生成要求的表格,在本工程Debug文件夹中建立一个Excel文件,命名为Template.xls。我们的OnRunexcel()代码如下(详见注释):

      void CVCExcelDlg::OnRunexcel()

      {

      // TODO: Add your control notification handler code here

      //用m_ExlApp对象创建Excel2003进程

      if(!m_ExlApp.CreateDispatch("Excel.Application",NULL))

      {

      AfxMessageBox("创建Excel服务失败!");

      return;

      }

      //设置为可见

      m_ExlApp.SetVisible(TRUE);

      ///下面得到应用程序所在的路径///

      CString theAppPath,theAppName;

      char Path[MAX_PATH];

      GetModuleFileName(NULL,Path,MAX_PATH);//得到应用程序的全路径

      theAppPath=(CString)Path;

      theAppName=AfxGetApp()->m_pszAppName;

      theAppName+=".exe";

      //把最后的文件名去掉

      int length1,length2;

      length1=theAppPath.GetLength();

      length2=theAppName.GetLength();

      theAppPath.Delete(length1-length2,length2);

      

      CString TempPath="";

      TempPath=theAppPath+"Template.xls";//EXCEL模板的路径

      m_ExlBooks.AttachDispatch(m_ExlApp.GetWorkbooks(),TRUE);

      m_ExlBook.AttachDispatch(m_ExlBooks.Add((_variant_t)TempPath),TRUE);//加载EXCEL模板

      m_ExlSheets.AttachDispatch(m_ExlBook.GetSheets(),TRUE);//加载Sheet页面

      //添加新的Sheet页面

      m_ExlSheets.Add(vtMissing,vtMissing,_variant_t((long)1),vtMissing);

      //删除第二个Sheet页面

      m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)2)),TRUE);

      m_ExlSheet.Delete();

      //把第一个Sheet页面的名字改变为TestSheet

      m_ExlSheet.AttachDispatch(m_ExlSheets.GetItem(_variant_t((long)1)),TRUE);

      m_ExlSheet.SetName("TestSheet");

      ///合并第一行单元格A1至D1//

      //加载要合并的单元格

      m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")),TRUE);

      m_ExlRge.Merge(_variant_t((long)0));

      设置表格内容

      m_ExlRge.AttachDispatch(m_ExlSheet.GetCells(),TRUE);//加载所有单元格

      m_ExlRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("数学系研究生课程统计"));

      m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("课程名"));

    m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("课时"));

      m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)3),_variant_t("难度"));

      m_ExlRge.SetItem(_variant_t((long)2),_variant_t((long)4),_variant_t("教学方式"));

      m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)1),_variant_t("泛函分析"));

      m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)2),_variant_t("60"));

      m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)3),_variant_t("普通"));

      m_ExlRge.SetItem(_variant_t((long)3),_variant_t((long)4),_variant_t("老师讲课"));

      m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)1),_variant_t("微分流形"));

      m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)2),_variant_t("40"));

      m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)3),_variant_t("变态难"));

      m_ExlRge.SetItem(_variant_t((long)4),_variant_t((long)4),_variant_t("自学"));

      m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)1),_variant_t("二阶椭圆型方程与方程组"));

      m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)2),_variant_t("60"));

      m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)3),_variant_t("很难"));

      m_ExlRge.SetItem(_variant_t((long)5),_variant_t((long)4),_variant_t("讨论"));

      m_ExlRge.AttachDispatch(m_ExlSheet.GetUsedRange());//加载已使用的单元格

      m_ExlRge.SetWrapText(_variant_t((long)1));//设置单元格内的文本为自动换行

      //设置齐方式为水平垂直居中

      //水平对齐:默认=1,居中=-4108,左=-4131,右=-4152

      //垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107

      m_ExlRge.SetHorizontalAlignment(_variant_t((long)-4108));

      m_ExlRge.SetVerticalAlignment(_variant_t((long)-4108));

      ///设置整体的字体、字号及颜色//

      Font ft;

      ft.AttachDispatch(m_ExlRge.GetFont());

      ft.SetName(_variant_t("宋体"));//字体

      ft.SetColorIndex(_variant_t((long)11));//字的颜色

      ft.SetSize(_variant_t((long)12));//字号

      ///设置标题字体及颜色//

      m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A1"),_variant_t("D1")));

      ft.AttachDispatch(m_ExlRge.GetFont());

      ft.SetBold(_variant_t((long)1));//粗体

      ft.SetSize(_variant_t((long)13));

      ft.SetColorIndex(_variant_t((long)2));

      CellFormat cf;

      cf.AttachDispatch(m_ExlRge.GetCells());

      //设置底色/

      Interior it;

      it.AttachDispatch(m_ExlRge.GetInterior());

      it.SetColorIndex(_variant_t((long)11));//标题底色

      表格内容的底色

      m_ExlRge.AttachDispatch(m_ExlSheet.GetRange(_variant_t("A2"),_variant_t("D5")));

      it.AttachDispatch(m_ExlRge.GetInterior());

      it.SetColorIndex(_variant_t((long)15));

      //为表格设置边框/

      Range UnitRge;

      CString CellName;

      for(int i=1;i<=4;i++)

      {

      for(int j=1;j<=4;j++)

      {

      CellName.Format("%c%d",j+64,i);//单元格的名称

      UnitRge.AttachDispatch(m_ExlRge.GetRange(_variant_t(CellName),_variant_t(CellName)));//加载单元格

      //LineStyle=线型 Weight=线宽 ColorIndex=线的颜色(-4105为自动)

      UnitRge.BorderAround(_variant_t((long)1),_variant_t((long)2),_variant_t((long)-4105),vtMissing);//设置边框

      }

      }

      //释放对象(相当重要!)

      m_ExlRge.ReleaseDispatch();

      m_ExlSheet.ReleaseDispatch();

      m_ExlSheets.ReleaseDispatch();

      m_ExlBook.ReleaseDispatch();

      m_ExlBooks.ReleaseDispatch();

      //m_ExlApp一定要释放,否则程序结束后还会有一个Excel进程驻留在内存中,而且程序重复运行的时候会出错

      m_ExlApp.ReleaseDispatch();

      //退出程序 m_ExlApp.Quit();

      }
    因为网上讲VC与Office编程的资料实在是太少了,即使有也很片面(VB讲这方面的东西却又多又全,郁闷~),想当初做这个东西的时候上网查资料快查疯掉了,最后还是一堆问题没有解决。

     本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wise019/archive/2008/11/25/3359964.aspx

    转载于:https://www.cnblogs.com/landy_mo/archive/2011/08/22/2148832.html

    展开全文
  • 本文上文的基础上,实现类Excel的一操作,就是单元格横向和纵向合并。以及底色的效果,如下图 以前文的基础进行改造 1:横向单元格合并 删除掉后表头最后一文本项 然后把前一项目拉...
  • 主要讲解了如何做一基础的到处样式,本文上文的基础上,实现类Excel的一操作,就是单元格横向和纵向合并。以及底色的效果,如下图以前文的基础进行改造1:横向单元格合并删除掉后表头最后一文本项然后把前...
  • asp.net知识库

    2015-06-18 08:45:45
    如何在Asp.Net1.1中实现页面模板(所谓的MasterPage技术) Tool Tip 示例(FILTER版) Tool Tip示例 (htc版) 一.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的...
  • MAPGIS地质制图工具

    2013-05-06 16:15:30
    2、 执行菜单“1辅助工具\导入导出功能\MapGis<-> Excel\MapGis-> Excel”,然后鼠标框选输出数据区域即可,自动打开Excel并且点数据输出到Excel,线数据表现单元格的合并上; 3、 执行菜单“1辅助工具\导入导出...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 实例071 如何将字节单位B转换成GB、MB 和KB 108 实例072 身份证号从15位升到18位算法 109 第3章 面向对象编程思想 111 3.1 面向对象家族核心——类与类成员 112 实例073 面向对象编程核心——类、对象和引用 112 ...
  • 除了提供大屏系统外,还将每模块都做了独立的模块示例界面,每模块都可以独立学习使用,里面用到的控件也单独做了控件示例界面,方便学习每控件如何使用,考虑着实周到! 超级详细的开发和使用手册,其中包括...
  • 实例047 如何在数组中插入数组元素 实例048 如何删除数组元素 实例049 利用数组实现矩阵转换 实例050 对数组进行二分查找 3.2 数组的应用 实例051 利用数组统计文字段落数 实例052 利用数组随机抽取幸运观众 ...
  • 千里马酒店前台管理系统V7使用手册

    热门讨论 2011-06-16 14:09:38
    如何避免排房冲突、如何确定房价等酒店业务规则,均这一层中处理。 数据处理层的作用是直接与数据库管理系统DBMS连接,负责低层的数据处理和存贮过程。千里马V7.2采用MS-SQL SERVER 2000数据库系统,并充分...
  • 实例047 如何在数组中插入数组元素 实例048 如何删除数组元素 实例049 利用数组实现矩阵转换 实例050 对数组进行二分查找 3.2 数组的应用 实例051 利用数组统计文字段落数 实例052 利用数组随机抽取幸运观众 ...
  • 怎么在excel表格的斜杠里面添加文字我只会添加斜杠,但是斜杠里写文字怎么写啊以绘制斜线表头,输入时间日期为例,添加文字步骤如下:在斜线表头中输入时间日期,绘制好的斜线表头如下:(时间日期此时并不是单...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

如何在excel加个表头