Apache POI生成excel教程
Apache POI简介:
Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API。用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)。
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格式档案的功能。
ps:摘至百度百科
Apache POI 作用很多实现excel只是其一部分功能。
创建excel文档
使用 Apache POI创建excel文档非常简单只需要一句话
Workbook workbook = new HSSFFWorkbook();
或
Workbook workbook = new SXSSFWorkbook();
前者用来创建xls (07之前老式表格文件单shell存储为65535行)
后者用来创建xlsx (07之后新式表格文件单shell存储为1048576行)
根据需要自行创建即可
这两个构造器还可以传入一个 int形式参数 用来设置缓冲区大小
表格输出
创建好表格后可以输出查看,Apache POI 已经将输出方法封装好了只需要我们根据输出路径创建好输出流即可
Workbook workbook = new SXSSFWorkbook();
File file=new File("文件路径","表格名称.xls");
OutputStream out =new FileOutputStream(file);
try {
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
表格输出就做好了
获取POI基础对象
Apache POI将wxcel表格结构分为3部分 从大到小分别是
- 页(Sheet)
- 行(Row)
- 单元格(Cell)
他们之间关系为包含关系,即:
一个表(Workbook)可以有多个页(Sheet)
一个页(Sheet)可以有多个行(Row)
一个行可以有多个单元格(Cell)
除表(Workbook)可以直接创建外其余对象获取方式分别是从父级对象创建。 如下:
Sheet sheet=workbook.createSheet("页名称");
Row row =sheet.createRow(本sheel中第几行);
Cell cell = row.createCell(本row中第几列);
需要注意的是除Sheet需要用String类型进行创建外其余需要用int型制定其创建位置,并且无论页名称还是位置均不可重复被创建。
ps:Apache POI 中计数方式是从0开始
创建完成后还可以根据名称或位置进行获取。如下:
Sheet sheet=workbook.getSheet("页名称");
Row row =sheet.getRow(本sheel中第几行);
Cell cell = row.getCell(本row中第几列);
当需要获取的对象还没有被创建的话获取结果为null
写入值
Cell下有6个写入方法可供选择。
void setCellValue(double var1);
void setCellValue(Date var1);
void setCellValue(Calendar var1);
void setCellValue(RichTextString var1);
void setCellValue(String var1);
void setCellFormula(String var1) throws FormulaParseException;
合并单元格
合并单元格是不同于之前创建单元格的,其是再表外部进行创建然后插入到Sheel中的
CellRangeAddress cra=new CellRangeAddress(起始行,截止行,起始列,截止列);
sheet.addMergedRegion(cra);
其他方法与正常单元格相同
样式与字体
- 样式
这块很坑 样式对象是与表对象绑定的不同表样式对象不能混用,就是说从a表获取的样式对象不能应用到b表中,当然也不是绝对的这块待会说。
CellStyle setBorder = workbook.createCellStyle();
setBorder.setFillForegroundColor((short) 13);// 设置背景色
setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
setBorder.setBorderBottom(CellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(CellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(CellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(CellStyle.BORDER_THIN);//右边框
setBorder.setAlignment(CellStyle.ALIGN_CENTER);//居中对齐
setBorder.setWrapText(true);//设置自动换行
- 字体
字体同理,不同的是字体获取后还需要手动放回到样式里
Font font = workbook.createFont();
font.setFontName("仿宋_GB2312");
font.setBoldweight(Font.BOLDWEIGHT_BOLD);//粗体显示
font.setFontHeightInPoints((short) 12);
setBorder.setFont(font);//选择需要用到的字体格式
- 样式与字体使用
对需要使用样式的单元格调用即可
cell.setCellStyle(setBorder);
- 样式复制
需要将样式跨表使用的时候就利用这个方式进行实现
CellStyle newSetBorder = workbook.createCellStyle();
newSetBorder.cloneStyleFrom(原样式对象);
至此Apache POI的基础使用讲解完成