一、Excel报表(POI)

1、需求说明

在企业级应用开发中,Excel报表是一种最常见的报表需求。Excel报表开发一般分为两种形式:
1、为了方便操作,基于Excel的报表批量上传数据
2、通过java代码生成Excel报表。
在Saas-Export系统中,也有大量的报表操作,那么接下来的课程就是一起来学习企业级的报表开发

2、Excel报表概述

目前世面上的Excel 分为两个大的版本Excel2003 和Excel2007 及以上两个版本;
两者之间的区别如下:

3、常见的Excel操作工具

Java中常见的用来操作Excl的方式一般有2种:JXL和POI。

  • JXL只能对Excel进行操作,属于比较老的框架,它只支持到Excel 95-2000的版本。现在已经停止更新和维护。

  • POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007。poi现在一直有更新。所以现在主流使用POI。

4、什么是POI

Apache POI是Apache软件基金会的开源项目,由Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java语言操作Microsoft Office的功能。

Apache POI是目前最流行的操作Microsoft Office的API组件,借助POI可以方便的完成诸如:数据报表生成,数据批量上传,数据备份等工作

5、POI简单实现

5.1、搭建环境

创建工程导入坐标:

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.0.1</version>
</dependency>

POI 工程结构
HSSF 提供读写Microsoft Excel XLS 格式档案的功能。
XSSF 提供读写Microsoft Excel OOXML XLSX 格式档案的功能。
HWPF 提供读写Microsoft Word DOC 格式档案的功能。
HSLF 提供读写Microsoft PowerPoint 格式档案的功能。
HDGF 提供读Microsoft Visio 格式档案的功能。
HPBF 提供读Microsoft Publisher 格式档案的功能。
HSMF 提供读Microsoft Outlook 格式档案的功能。

5.2、API说明

HSSF提供读写Microsoft Excel XLS格式档案的功能。 2003版本
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能。2007版本
API名称 说明
Workbook Excel的文档对象,针对不同的Excel类型分为:HSSFWorkbook(2003)和XSSFWorkbool(2007)
Sheet Excel的表单
Row Excel的行
Cell Excel的格子单元
Font Excel字体
CellStyle 格子单元样式

5.2、创建excel

public class PoiTest01 {

/**
* 创建一个excel
* 创建excel:
* 1.创建工作簿
* 2.创建sheet
* 3.创建行对象
* 4.创建单元格
* 5.对单元格赋值
* 6.设置样式
* 7.下载
*/
@Test
public void test() throws Exception {
//1.创建一个工作簿
//Workbook wb = new HSSFWorkbook(); //处理excel2003版本 .xls
Workbook wb = new XSSFWorkbook();//处理excel2007及以上版本 .xlsx
//new SXSSFWorkbook();// 处理大数据量excel报表对象
//2.创建sheet
Sheet sheet = wb.createSheet("abc");
//3.创建行对象
Row row = sheet.createRow(1);//接受参数 ,数组下标
//4.创建单元格
Cell cell = row.createCell(1);//数组下表
//5.设置单元格内容
cell.setCellValue("测试文本");

//设置样式
/**
* 1.创建样式对象
* 2.通过样式对象指定样式
* 3.配置单元个样式
*/
CellStyle cellStyle = wb.createCellStyle();
//通过样式对象指定样式
cellStyle.setBorderTop(BorderStyle.THIN); //细线
cellStyle.setBorderBottom(BorderStyle.THIN); //细线
cellStyle.setBorderLeft(BorderStyle.THIN); //细线
cellStyle.setBorderRight(BorderStyle.THIN); //细线

//字体 对象
Font font = wb.createFont();
font.setFontName("华文行楷");
font.setFontHeightInPoints((short)26);//字号

cellStyle.setFont(font);
cell.setCellStyle(cellStyle);

//指定行高和列宽
sheet.setColumnWidth(1,20*256); //列宽 不准确!!!
row.setHeightInPoints(30);

//6.将excel保存到本地磁盘中
FileOutputStream fos = new FileOutputStream("E:\\text.xlsx");
wb.write(fos);
fos.close();
}
}

2.3、读取excel

public static void main(String[] args) throws Exception {
//1.根据Excel 文件创建工作簿
Workbook wb = new XSSFWorkbook("C:\\demo.xlsx");
//2.获取Sheet
Sheet sheet = wb.getSheetAt(0);//参数:索引
//3.获取Sheet 中的每一行,和每一个单元格,小于等于表中有效行的最后一行的行号,POI将行号从0开始
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum);//根据索引获取每一个行
StringBuilder sb = new StringBuilder();
for (int cellNum = 2; cellNum < row.getLastCellNum(); cellNum++) {
//根据索引获取每一个单元格
Cell cell = row.getCell(cellNum);
//获取每一个单元格的内容
Object value = getCellValue(cell);
sb.append(value).append("-");
}
System.out.println(sb.toString());
}
} public static Object getCellValue(Cell cell) {
//1.获取到单元格的属性类型
CellType cellType = cell.getCellType();
//2.根据单元格数据类型获取数据,此处注意,cell中的日期格式其实就是数字格式
Object value = null;
switch (cellType) {
case STRING:
value = cell.getStringCellValue();
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
//日期格式
value = cell.getDateCellValue();
} else {
//数字
value = cell.getNumericCellValue();
}
break;
case FORMULA: //公式
value = cell.getCellFormula();
break;
default:
break;
}
return value;
}

 POI中有关样式的设置

    //大标题的样式
public CellStyle bigTitle(Workbook wb){
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short)16);
font.setBold(true);//字体加粗
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER); //横向居中
style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中
return style;
} //小标题的样式
public CellStyle title(Workbook wb){
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short)12);
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER); //横向居中
style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中
style.setBorderTop(BorderStyle.THIN); //上细线
style.setBorderBottom(BorderStyle.THIN); //下细线
style.setBorderLeft(BorderStyle.THIN); //左细线
style.setBorderRight(BorderStyle.THIN); //右细线
return style;
} //文字样式
public CellStyle text(Workbook wb){
CellStyle style = wb.createCellStyle();
Font font = wb.createFont();
font.setFontName("Times New Roman");
font.setFontHeightInPoints((short)10); style.setFont(font); style.setAlignment(HorizontalAlignment.LEFT); //横向居左
style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中
style.setBorderTop(BorderStyle.THIN); //上细线
style.setBorderBottom(BorderStyle.THIN); //下细线
style.setBorderLeft(BorderStyle.THIN); //左细线
style.setBorderRight(BorderStyle.THIN); //右细线 return style;
}

POI报表打印的更多相关文章

  1. 使用POI实现报表打印功能

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/53393453 作者:朱培 ID:sdksdk0 这 ...

  2. 在DevExpress程序中使用条形码二维码控件,以及进行报表打印处理

    在很多业务系统里面,越来越多涉及到条形码.二维码的应用了,不管在Web界面还是WInform界面都需要处理很多物料相关的操作,甚至很多企业为了减少录入错误操作,为每个设备进行条形码.二维码的标签,直接 ...

  3. 关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出”

    问题:关闭rdlc报表打印预览后,关闭客户端,抛出异常“发生了应用程序级的异常 将退出” 办法:在容纳ReportViewer的窗体后台代码中,添加如下代码即可 protected override ...

  4. JS调用水晶报表打印翻页按钮事件

    默认的水晶报表打印按钮.翻页按钮太小,并且样式不好调整,考虑自己做一个按钮,然后调用水晶报表的按钮事件. 在实际操作中发现可以在.net按钮的服务器端事件中调用翻页方法: CrystalReportV ...

  5. openerp模块收藏 基于Lodop的报表打印模块(转载)

    基于Lodop的报表打印模块 原文:http://shine-it.net/index.php/topic,7397.0.html 前段时间写了个小模块,来解决OE中报表打印不方便的问题.借鉴了 @b ...

  6. 微软RDLC报表打印

    关于微软RDLC报表打印时文字拉伸问题(Windows server 2003 sp2) 最近我们开发的打印服务频频出现打印文字拉伸问题,客户意见络绎不绝,最为明显的是使用黑体加粗后 “2.0份” 打 ...

  7. unigui+fastreport报表打印

    unigui+fastreport报表打印   unigui+fastreport报表打印 FASTREPORT导出成PDF报表,UNIGUI的TUniURLFrame显示PDF报表并打印. func ...

  8. vb 水晶报表打印

    vb里面的水晶报表打印控件:CrystalReportViewer 用到的dll文件: 水晶报表打印其实很简单,只要创建报表对象,再对其传递数据就可以打印出来.当然所传递的数据要与水晶报表设计里面的数 ...

  9. RDLC报表打印

    如果你的报表能正常显示,会看到RDLC工具条下的打印图标: 如果在客户端,第一次去点击此铵钮,如果当前操作者没有管理权限,会提示: Unable to load client print contro ...

随机推荐

  1. Python进阶(六)----装饰器

    Python进阶(六)----装饰器 一丶开放封闭原则 开放原则: ​ 增加一些额外的新功能 封闭原则: ​ 不改变源码.以及调用方式 二丶初识装饰器 装饰器: ​ 也可称装饰器函数,诠释开放封闭原则 ...

  2. weblogic如何修改密码&密码找回

    一.修改Console密码后,挂载的服务无法重启[解决办法] 1. 打开weblogic控制台,安全领域 --> myrealm --> 用户和组,将会看到weblogic用户,可以直接删 ...

  3. CentOS 6 使用 tptables 打开关闭防火墙与端口

    开启访问端口 Linux版本:CentOS release 6.9 此处以nginx访问端口8081为例 编辑:vi /etc/sysconfig/iptables 添加:-A RH-Firewall ...

  4. H3C 802.11b/g工作频段划分图

  5. FriendlyCore overlayfs 挂载方式

    友善 friendlycore 挂载 overlayfs 过程: uboot 引导系统启动的时候加载 ramdisk.img  这个 cpio 格式的 initrd(虚拟文件系统). 注意: ramd ...

  6. requireJS的基本使用

    requireJS的基本使用 一.总结 一句话总结: requireJS是js端模块化开发,主要是实现js的异步加载,和管理模块之间的依赖关系,便于代码的编写和维护 1.页面加载的js文件过多的缺点是 ...

  7. CentOS7.5下SVN服务器备份与恢复

    可以先查看 svnadmin 命令的使用说明 svnadmin --help 1.完全备份和增量备份 查看 svnadmin dump 命令的使用说明 svnadmin dump --help svn ...

  8. SVN (TortioseSVN) 版本控制之忽略路径(如:bin、obj)

    在SVN版本控制时,新手经常会遇到这样的问题: 1.整个项目一起提交时会把bin . gen . .project 一同提交至服务器 2.避免提交编译.本地配置等文件在项目中单独对src.res进行提 ...

  9. datebox设置默认时间

    1. html代码: <input id="txtBeginTime" class="easyui-datebox" data-options=" ...

  10. Hibernate的悲观锁和乐观锁

    前一篇博客我们从数据库角度分析,锁可以分为三种,分别为共享锁,独占锁和更新锁.我们从程序的角度来看锁可以分为两种类型,悲观锁和乐观锁,Hibernate提供对这两种锁 的支持,我们来了解一下Hiber ...