Apache POI生成excel教程

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)
avatar

他们之间关系为包含关系,即:
一个表(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的基础使用讲解完成

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache POI 是一款 Java 的操作 Microsoft Office 文件的开源框架,包括 Excel、Word、PowerPoint 等。在 Excel 文件中,使用 shared strings 机制可以有效地减小文件大小,提高读写效率。下面是使用 Apache POI 生成 shared strings 的示例代码: ```java Workbook wb = new XSSFWorkbook(); CreationHelper createHelper = wb.getCreationHelper(); Sheet sheet = wb.createSheet("Sheet1"); // 创建 shared string table SharedStringsTable sst = ((XSSFWorkbook) wb).getSharedStringSource(); if (sst == null) { sst = ((XSSFWorkbook) wb).createSharedStringTable(); } // 添加 shared string String[] strings = new String[]{"Hello", "World", "Apache", "POI"}; for (String s : strings) { sst.addEntry(createHelper.createRichTextString(s)); } // 在单元格中使用 shared string Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue(createHelper.createRichTextString(strings[0])); cell = row.createCell(1); cell.setCellValue(createHelper.createRichTextString(strings[1])); cell = row.createCell(2); cell.setCellValue(createHelper.createRichTextString(strings[2])); cell = row.createCell(3); cell.setCellValue(createHelper.createRichTextString(strings[3])); ``` 在这个示例中,我们创建了一个 `XSSFWorkbook` 对象,然后通过 `getSharedStringSource()` 方法获取 shared string table。如果 shared string table 不存在,则通过 `createSharedStringTable()` 方法创建。然后,我们添加了一些字符串到 shared string table 中。最后,我们在 Excel 表格中添加了一行数据,其中每个单元格都是通过 `createHelper.createRichTextString()` 方法创建的 shared string 对象。 需要注意的是,如果一个单元格中的字符串在 shared string table 中不存在,则会自动创建一个新的 shared string 对象。因此,在使用 shared strings 机制时,我们需要确保尽可能多地复用已有的 shared string 对象,以减小文件大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值