一、需求背景

  在项目开发中,经常会遇到导出Excel报表文件的情况,因为很多情况下,我们需要打印Excel报表,虽然在网页上也可以生成报表,但是打印网上里的报表是无法处理排版问题的,所以最好的方式,还是生成Excel文件。

PageOffice封装了一组用于动态输出数据到Excel文档的相关类,全部包含在com.zhuozhengsoft.pageoffice.excelwriter  命名空间之中。PageOffice对Excel的赋值操作分两种方式:1. 单元格赋值,这个很好理解,sheet.openCell("D5"),返回值就是一个Cell对象;2. 针对一个区域赋值。这个区域在PageOffice的概念里就是Table对象,比如:sheet.openTable("C9:H15")的返回值就是就是Table对象,这个Table就是”C9:H15”这个区域。下面就针对这两种操作方式来分别介绍。

二、 给Excel单元格赋值

  创建Workbook对象,操作指定sheet中的指定单元格,在打开Excel文件后通过PageOfficeCtrl对象的setWriter方法把数据写入到Excel文件中:

Workbook wb = new Workbook();
Sheet sheet = wb.openSheet("销售订单");
sheet.openCell("D5").setValue(“北京某某公司”);PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
poCtrl1.setServerPage("poserver.do");
poCtrl1.setWriter(wb);
poCtrl1.webOpen("{模板文件路径}", OpenModeType.xlsSubmitForm, "");

  通过上面的代码可以看出,给Excel单元格赋值,首先需要创建Workbook对象,然后通过此对象的OpenSheet方法,获取到Sheet对象,再通过Sheet对象的OpenCell方法就可以获取的Cell对象,进行赋值或其他操作。

  Sheet对象有两个方法可以获取到Cell对象:1. openCell(String CellAddress),参数为单元格引用字符串。例如:"A1";2. openCellRC(int Row, int Col),参数为excel单元格的行数和列数。所以上面给Excel单元格赋值的代码改成下面的代码也是可以的。

sheet.openCellRC(5,4).setValue(“北京某某公司”);

三、设置Cell的样式

  

  这些属性不但可以用来设置单元格的前景色、背景色、边框、字体和对齐方式,甚至可以设置公式,基本上所有的单元格设置需求都可以实现。比如:设置一个单元格的背景色为为绿色。

  

Workbook wb = new Workbook();
wb.openSheet("Sheet1").openCell("E16").setBackColor(new Color(0, 128, 128));

  果要设置单元格的字体,就需要操作Font对象进行设置;如果要设置单元格的边框样式,就需要操作Border对象进行设置。使用Border对象设置Excel的单元格样式,是可以分别对单元格的上下左右边框单独设置样式的,所以再复杂的表格样式用PageOffice也可以“绘制”出来。PageOffice中的Table对象可以设置Table的Border样式,所以在此不作详细的叙述,下面单独用一个章节来叙述Border的设置。

四、操作Excel中的区域(Table) 

  PageOffice开发平台中,针对Excel文件的处理增加了一个“Table”的概念,一个Table指的就是一个区域,例如:sheet.OpenTable("C9:H15")的返回值就是就是Table对象,这个Table所操作的区域就是”C9:H15”。 为何需要这个Table的概念呢?下面就说明一下使用Table对象的优点。

在实际的项目需求中,常常会需要在Excel 中循环的插入多条数的数据,比如:需要在excel中以B11单元格为起始位置,插入10条包含6个字段的数据,如果使用Cell对象写一个循环程序给单元格赋值会是这样的:

DataTable dt = new DataTable();
for (int i = 0; i < 10; i++) // 10条数据
{sheet.OpenCellRC(“B”+(11+i).ToString())Value = dt.Rows[i][0].ToString();sheet.OpenCellRC(“C”+(11+i).ToString())Value = dt.Rows[i][1].ToString();sheet.OpenCellRC(“D”+(11+i).ToString())Value = dt.Rows[i][2].ToString();sheet.OpenCellRC(“E”+(11+i).ToString())Value = dt.Rows[i][3].ToString();sheet.OpenCellRC(“F”+(11+i).ToString())Value = dt.Rows[i][4].ToString();sheet.OpenCellRC(“G”+(11+i).ToString())Value = dt.Rows[i][5].ToString();
}

  如果使用Table对象编程,就与操作数据集的概念一样,代码也更灵活,代码如下:

DataTable dt = new DataTable();
PageOffice.ExcelWriter.Table table1 = sheet.OpenTable("B11:G20");
for (int i = 0; i < 10; i++) // 10条数据
{for (int j = 0; j <6; j++) // 6个字段
    {table1.DataFields[j].Value = dt.Rows[i][j].ToString();}table1.NextRow();
}
table1.Close();

  通过Cell实现这个赋值操作还有一个方法,使用OpenCellRC方法,通过行列号操作会更简单,代码如下:

DataTable dt = new DataTable();
for (int i = 0; i < 10; i++) // 10条数据
{for (int j = 0; j <6; j++) // 6个字段
    {sheet.OpenCellRC(11+i,2+j )Value = dt.Rows[i][j].ToString();}
}

  但是这个代码相对于Table对象的操作来说有点晦涩,只是看OpenCellRC中的参数是不容易立刻知道操作的是哪个单元格的,还有一个情况是通过Cell赋值无法做到的,那就是在已有的表格模板中插入不定行数的数据。例如:下图中的模板在“合计”之前只有10行空白行,怎么动态插入50条数据并且数据行的样式也统一呢?这种情况使用Cell是无法解决问题的,但是前面使用Table给Excel赋值的代码就可以解决这个问题。使用Table赋值的特点是:在赋值的过程中,如果Table所包含的区域行数不够,那么Table会自动插入行,并且循环重复使用Table区域中各行的样式,直到所有的数据都填充完毕。

转载于:https://www.cnblogs.com/pageoffice/p/9023214.html

[原创]java导出excel相关推荐

  1. java填充excel表格中_填充导出Java导出excel表格

    近期朋友几篇文章介绍了改填充导出的文章. 关联文章的地址 之前做项目的时候需要数据库导出excel格式,由于项目赶没实现,现在分享下如何用java导出excel.话不多说案例如下: 首先要做的是导入一 ...

  2. java导出excel设置行高列宽_使用POI生成Excel文件,可以自动调整excel列宽

    //autoSizeColumn()方法自动调整excel列宽 importjava.io.FileOutputStream; importorg.apache.poi.hssf.usermodel. ...

  3. java导出excel文件名_怎么解决java导出excel时文件名乱码

    怎么解决java导出excel时文件名乱码 发布时间:2020-06-19 16:59:00 来源:亿速云 阅读:137 作者:元一 java解决导出Excel时文件名乱码的方法示例:String a ...

  4. java 导出excel教程_Java导出Excel表格

    Java导出Excel表格 导出Excel表格需要一个poi-3.9.jar的包,该包在网上可以找到. 第一步,创建Excel对象. HSSFWorkbook workbook = new HSSFW ...

  5. java 浏览器 excel导出excel_使用Java导出Excel表格并由浏览器直接下载——基于POI框架...

    非异步方法 /** * 使用Java导出Excel表格并由浏览器直接下载--基于POI框架 * * @param response * @return * @throws IllegalAccessE ...

  6. java文件无法导出excel文件,【excel表格文件格式无效】java导出excel,excel打不开,报文件格式无效,怎么解决!...

    excel提示 打开的文件.xls的格式与文件扩展名不一致怎么办 如果打开文件的格式与文件的扩展名不一致,只要能够打开就不用去管他. java导出excel,excel打不开,报文件格式无效,怎么解决 ...

  7. Java 导出excel进行换行

    java 导出Excel进行换行 String.valueOf((char)10) 在导出excel 的时候,如果原始文字中含有 \n 字符, 如果把 \n 替换为<br/>,excel不 ...

  8. java导出Excel(POI模式 Ajax下载 Post传参) bootstrap table getVisibleColumns获取显示的列

    工具类 (正式使用) package com.qyj.utils;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson. ...

  9. java 导出excel 附带图片

    java 导出excel 附带图片,思路将后台数据里保存的图片url转为file ,添加到excel里导出 代码示例 String imgPath = filePath +item.getFilePa ...

  10. Java导出excel文件以.xlsx后缀结尾,可设置部分单元格只读

    前言 最近在做一个小项目,有个模块的功能涉及到excel的导入导出,并且要求对导出的excel文件部分列和单元格设置为只读不可更改,在网上到处查找了一番资料,结合自己的想法,发现也并不难,这里整理记录 ...

最新文章

  1. Spring Boot + Vue 如此强大?竟然可以开发基于 C/S 架构的应用
  2. 面向自然语言处理的深度学习
  3. 白盒测试工具_别再头疼工作效率低!这些超实用的黑盒、白盒测试方法你都用上了吗?...
  4. centos6 安装 mantisbt-1.2.8 —— (4)在CentOS6.4中安装配置LAMP环境
  5. Mac安装jdk1.8 / mysql5.7.16 与配置环境变量
  6. 小米MIX 4 Pro“老底”被掀了,看完很激动!
  7. Linux命令之xargs命令详解
  8. np.memmap读取大文件
  9. python编辑器文字放大_python学习笔记000
  10. 蓝桥杯 BASIC-2 基础练习 01字串
  11. 匿名管道 与 命名管道
  12. 数据库分区分片(Shards)技术概览
  13. VC++制作连连看辅助经验分享
  14. openmodelica安装
  15. 上计算机课应该有的表现,计算机应用基础学习过程表现
  16. 修改显卡型号(自娱自乐)
  17. deno计算机语言什么意思,一篇文章告诉你什么是Deno!
  18. jenkins 出现“Error 403 No valid crumb was included in the request ”的解决方案
  19. VirutualBox虚拟机内ubuntu扩充硬盘容量
  20. Hive-编写UDF函数(详细教程~~~)

热门文章

  1. Android Studio 插件——《阿里巴巴 Java 开发规约》的扫描插件
  2. ftp 实现文件的上传下载以及列出文件列表
  3. Could not find class
  4. 网站测试自动化系统—在测试代码中硬编码测试数据
  5. (一)伤不起--java调用dll
  6. IDEA配置JSTL与简单使用
  7. 一文快速了解 Java 9 - 16 新特性,网友:卷不动了?
  8. 来我们公司面试必问的41道 SpringBoot 面试题,不看亏大了!
  9. 还不会回答Spring Boot和Spring MVC的关系?大厂Java高级面试官告诉你答案!
  10. 小型电商Web架构!小而美!值得学习!