POI文档导出(java)

基于java的POI

java在很多的方面都有很多引用,尤其是最近一俩年,java的运用无处不在。很多情况下,我们需要导出一些表格或者其他文档,而程序环境是在java语言下的,那么,Apache提供了解决途径——POI。



前言

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。


提示:以下是本篇文章正文内容,下面案例可供参考

一、POI结构

模块功能
HSSF提供读写Microsoft Excel XLS格式档案的功能 (Excel 2003)
XSSF提供读写Microsoft Excel OOXML XLSX格式档案的功能(Excel 2007+)
HWPF提供读写Microsoft Word DOC格式档案的功能
HSLF提供读写Microsoft PowerPoint格式档案的功能
HDGF提供读Microsoft Visio格式档案的功能
HPBF提供读Microsoft Publisher格式档案的功能
HSMF提供读Microsoft Outlook格式档案的功能

二、官方网址

Apache


官网首页示意图:
Apache官网首页

三、常用类说明

类名说明
HSSFWorkbookExcel的文档对象
HSSFSheetsheet页
HSSFRowExcel的行
HSSFCellExcel的格子单元
HSSFFontExcel字体
HSSFDataFormat格子单元的日期格式
HSSFCellStyle格子单元样式

Excel依赖关系

Excel的创建过程:

  1. 创建文档对象
  2. 创建Sheet页
  3. 在该Sheet也上创建Row
  4. 在该Row上创建Cell
  5. 对该Cell进行CellStyle样式渲染

四、使用说明

生成Excle的基础示例:

//创建文档对象
Workbook wb = new HSSFWorkbook();
//创建一个名叫 demo1 的sheet页
Sheet st=wb.createSheet("demo1");
//在当前页创建一行参数为行的下标从0开始
Row row=st.createRow(0);
//在当前行中插入列参数为列的下标从0开始
Cell cell=row.createCell(0);
cell.setCellValue("张三");

row.createCell(1).setCellValue(12);
row.createCell(2).setCellValue(56.5);
row.createCell(3).setCellValue(newDate());

//调用文档对象的write方法将内容通过输出流输出到指定文件最后关闭流
wb.write(new FileOutputStream("D:/测试.xls"));
wb.close();

五、合并单元格

POI提供了转门用于合并单元格的类CellRangeAddress

使用示例:

//需求:现在要合并 2-4行 1-5列的单元格
//先将合并单元格中的的首行首列创建出来
Row row=st.createRow(1);//创建第二行
Cell cell=row.createCell(0);//创建第一列
cell.setCellValue("合并单元格");//设置单元格内容
/*
开始合并单元格
使用 CellRangeAddress(firstRow, lastRow, fristCell, lastCell)
四个参数表示要合并单元格的 起始行 结束行 起始列 结束列
*/
CellRangeAddress cra=new CellRangeAddress(1, 3, 0, 4);
//将合并后单元格加入当前sheet页
st.addMergedRegion(cra);

普通单元格和合并后的单元格在Excel中并不是同一个管理对象
对其进行样式设置等方式需要区别对待

六、设置单元格格式

使用CellStyle对象来进行单元格样式设置
获取方式:
CellStylecs=wb.createCellStyle();

常用样式

//设置样式 -- 获取样式对象
HSSFCellStyle style=workbook.createCellStyle();

//设置背景色
cs.setFillForegroundColor(HSSFColorPredefined.YELLOW.getIndex());
//设置填充样式此项必选否则有时无法显示背景色
cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);

//设置底边框;  通过BorderStyle枚举 设置边框类型
style.setBorderBottom(BorderStyle.THIN);
//设置底边框颜色;  通过HSSFColorPredefined枚举类获取内置颜色
style.setBottomBorderColor(HSSFColorPredefined.BLACK.getIndex());
//设置左边框;
style.setBorderLeft(BorderStyle.THIN);
//设置左边框颜色;  也可以通过IndexedColors枚举类获取内置颜色
style.setLeftBorderColor(IndexedColors.BLACK.getIndex());
//设置右边框;
style.setBorderRight(BorderStyle.THIN);
//设置右边框颜色;
style.setRightBorderColor(IndexedColors.BLACK.getIndex());
//设置顶边框;
style.setBorderTop(BorderStyle.THIN);
//设置顶边框颜色;
style.setTopBorderColor(IndexedColors.BLACK.getIndex());
//设置自动换行;
style.setWrapText(true);
//设置水平对齐的样式为居中对齐;  参数通过HorizontalAlignment枚举获取
style.setAlignment((short) horAlignment);
//设置垂直对齐的样式为居中对齐;  参数通过VerticalAlignment枚举获取
style.setVerticalAlignment((short) verAlignment);
// 设置字体 -- 字体需要单独设置使用HSSFFont对象
HSSFFont font=workbook.createFont();
//设置字体大小
font.setFontHeightInPoints((short)fontSize);
//字体加粗
font.setBoldweight((short) fontWeight);
//设置字体名字
font.setFontName(fontName);
//在样式用应用设置的字体;  
style.setFont(font);	

常用枚举类

枚举类型说明
HSSFColorPredefined获取内置颜色 excel2003
IndexedColors获取内置颜色excel2007+
BorderStyle设置边框类型
HorizontalAlignment设置水平对齐方式
VerticalAlignment设置垂直对其方式
FillPatternType背景填充方式常用FillPatternType.SOLID_FOREGROUND

设置时间格式化

通过CreationHelper对象来设置格式化模式串

//设置一列
Cell cell=row.createCell(0);
//设置该列的值为 Date类型
cell.setCellValue(newDate());
//开启样式对象
CellStyle css=wb.createCellStyle();
//通过 WorkBook 获取 CreationHelper 对象
CreationHelper ch=wb.getCreationHelper();
// 利用CreationHelper对象设置日期格式化模式串并传递给样式对象
css.setDataFormat(ch.createDataFormat().getFormat("yyyy-MM-dd"));
//设置当前单元格的样式
cell.setCellStyle(css);

设置单元格宽和高

1.设置默认宽和高

/**
 * 设置单元格默认的宽度;整个 Sheet 中单元格的宽度都将被修改;方法来自 Sheet 接口
 * @param width 宽度值;单位是 1/256 个字符宽度,即值建议设置为256的倍数
*/
  public void setDefaultColumnWidth(int width);
/**
  *设置单元格默认的高度;整个 Sheet 中单元格的高度都将被修改;方法来自 Sheet 接口
  *   @param height 高度值;单位是 1/20 个点,即值建议设置为20的倍数
*/
public void setDefaultRowHeight(short height);

2.指定某行列/行宽高

/**
	*设置指定单元格的宽度;单元格的宽度即列的宽度;方法来自 Sheet 接口
	* @param columnIndex 列的索引;值从 0 开始
	* @param width 宽度值;单位是 1/256 个字符宽度,即值建议设置为256的倍数
	*/
public void setColumnWidth(int columnIndex, int width);
/**
	*设置指定单元格的高度;单元格的高度即行的高度;方法来自 Row 接口
	* @param height 高度值;单位是 1/20 个点,即值建议设置为20的倍数
*/
public void setHeight(short height);
/**
	*设置指定单元格的高度;与 setHeight() 作用一致,但参数单位不同;方法来自 Row 接口
	* @param height 高度值;单位是 1 整个点
*/
public void setHeightInPoints(float height);

3.代码示例

// 创建一个Sheet对象
Workbook workbook=new HSSFWorkbook();
Sheet sheet=workbook.createSheet("sheet");

// 设置第一列的宽度 10个字符长度
sheet.setColumnWidth(0, 10*256);
// 设置第一行的高度 30个点
Rowrow=sheet.createRow(0);
row.setHeight((short) (30*20));
row.setHeightInPoints((short) 30);

// 设置默认的宽和高
sheet.setDefaultColumnWidth(100*256);
sheet.setDefaultRowHeight((short) (30*20));

合并单元格样式

在POI中对于合并单元格有特殊处理方式,合并后的单元格和普通单元格的类型是不同的

针对于合并单元格的普通样式设置,只需要对该合并单元格所对应的首行首列单元格进行设置即可

但如果要给合并单元格添加边框则需要调用 RegionUtil 类做特殊处理,如下所示:

//设置上边框样式 cra为单元格对象CellRangeAddress st为当前Sheet对象
RegionUtil.setBorderTop(BorderStyle.THIN,cra,st);
//设置下边框样式
RegionUtil.setBorderBottom(BorderStyle.THIN,cra,st);
//设置左边框样式
RegionUtil.setBorderLeft(BorderStyle.THIN,cra,st);
//设置有边框样式
RegionUtil.setBorderRight(BorderStyle.THIN,cra,st);

完结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值