开发者社区> waylau> 正文

使用 Apache POI 处理 Microsoft Office 文档

简介:
+关注继续查看

POI 概述

Apache POI 项目的使命是创造和维护 Java API 操纵各种格式的文件,其中包括基于 Office Open XML 标准(OOXML)和微软的OLE 2 Compound Document 格式(OLE2)。总之,你可以使用 Java 读写 MS Excel 文件。此外,您可以使用 Java 读取和写入 MS Word 和 MS PowerPoint 文件。Apache POI 是你的 Java Excel 解决方案(用于Excel 97-2008)。包含了一个完整的 API 用于移植其他 OOXML 和OLE2 格式。

OLE2 文件包括了 Microsoft Office 文件,比如 XLS, DOC, PPT 以及 MFC 的序列化 API 为基础的文件格式。项目提供OLE2 Filesystem (POIFS)OLE2 Document Properties (HPSF) 等 API。

Office OpenXML Format 是 Microsoft Office 2007 和 2008 中新的基于 XML 的标准。包括 XLSX, DOCX 和 PPTX。该项目提供了一个低级别的 API 使用 openxml4j来支持 Open Packaging Conventions(开放打包约定)。

针对每个 现存的 MS Office 模块组件,试图提供一个共同的高级别 Java api 给 OLE2 和 OOXML 文档格式。Excel (SS=HSSF+XSSF) Word (HWPF+XWPF),PowerPoint (HSLF+XSLF),Outlook (HSMF), Visio (HDGF), TNEF (HMEF), 和 Publisher (HPBF).

该项目尽可能与其他项目合作提供此功能。比如:Cocoon提供 HSSF 的序列化;与Open Office.org合作处理 XLS 格式;和Tika/ Lucene提供格式解释器。

组件

组件 应用类型 Maven artifactId 备注
POIFS OLE2 Filesystem poi Required to work with OLE2 / POIFS based files
HPSF OLE2 Property Sets poi
HSSF Excel XLS poi For HSSF only, if common SS is needed see below
HSLF PowerPoint PPT poi-scratchpad
HWPF Word DOC poi-scratchpad
HDGF Visio VSD poi-scratchpad
HPBF Publisher PUB poi-scratchpad
HSMF Outlook MSG poi-scratchpad
OpenXML4J OOXML poi-ooxml plus either poi-ooxml-schemas or
ooxml-schemas and ooxml-security
see below for differences
XSSF Excel XLSX poi-ooxml
XSLF PowerPoint PPTX poi-ooxml
XWPF Word DOCX poi-ooxml
Common SS Excel XLS and XLSX poi-ooxml WorkbookFactory and friends all require poi-ooxml, not just core poi

使用

下面展示使用 HSSF 来创建 excle 的案例

创建一个 POI 项目

mvn archetype:create -DgroupId=com.waylau.poi -DartifactId=poi-demos

引入相关 POI 依赖

本例子是版本 3.11

<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.11</version> </dependency> 

第一个 HelloWorld 程序

新增一个 HelloWorld.java

HSSFWorkbook() 用来创建工作簿

Workbook wb = new HSSFWorkbook(); // 或 new XSSFWorkbook(); 

wb.createShee 是用来创建 Sheet

Sheet sheet1 = wb.createSheet("第1个 sheet");
Sheet sheet2 = wb.createSheet("第2个 sheet");

有 Sheet 的命名具有一定的限制性,比如,不能用 * 等,为了方便、安全的命名,可以使用org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName 方法,

String safeName = WorkbookUtil.createSafeSheetName("[WayLau's Blog*?]"); // 返回 " WayLau's Blog "

Sheet sheet3 = wb.createSheet(safeName);

创建数据 行。Row 是从 0 开始的

Row row = sheet1.createRow((short)0);

创建 Cell 放值进去

Cell cell0 = row.createCell(0);
cell0.setCellValue(1);

更简单的做法是在一行代码实现

row.createCell(1).setCellValue(1.2);
row.createCell(2).setCellValue(true);

可以用 CreationHelper 处理实例化具体类的不同实例

CreationHelper createHelper = wb.getCreationHelper();
row.createCell(3).setCellValue(createHelper.createRichTextString("This is a string"));

使用 CellStyle,用来设置 Cell 的样式

CellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(
 createHelper.createDataFormat().getFormat("m/d/yy h:mm"));

Cell cell4 = row.createCell(4);
cell4.setCellValue(new Date());
cell4.setCellStyle(cellStyle);

最后生成 excle 文件

FileOutputStream fileOut = new FileOutputStream("helloword.xls");
wb.write(fileOut);
fileOut.close();

效果

项目源码

https://github.com/waylau/poi-demos 项目中 HelloWorld.java 示例

参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook)
原文: VSTO 得到Office文档的选中内容(Word、Excel、PPT、Outlook) 目的:得到在Word、Excel、PPT、Outlook中选中的一段内容。
981 0
[前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化
在前端优化中,js、css等文件的优化一般都是压缩的优化,进行合并、减小体积以达到减小请求的目的。 今天发现了一个集成在VS中的压缩插件,使得压缩变得比较快捷。 配置方法 首先需要去下载Microsoft Ajax Minifier,一路安装就可以,如果VS正在使用,需要重启。
851 0
Qt之处理QNetworkAccessManager网络连接超时
简述 在网络操作中,经常会由于各种原因引起网络连接超时,究竟何为网络连接超时? 网络连接超时:在程序默认的等待时间内没有得到服务器的响应 简述 超时原因 Qt 中的网络连接超时 如何处理超时 封装类 超时原因 引起网络连接超时的原因很多,下面,列举一些常见的原因: 网络断开,不过经常显示无法连接 网络阻塞,导致你不能在程序默认等待时间
4326 0
Web系统下Office文档的处理
在web环境中,我们经常遇到需要对Office文档进行各种各样的处理,如:格式转化、统计、修改等各种操作,如果使用Office的客户端对象模型直接处理,一般会遇到:效率低;服务器资源负载大等一系列问题,毕竟Office对象实现时主要针对的是客户端的使用而设计的,对于批量和大负载的处理自然效率欠佳。
820 0
MaxCompute(ODPS)上处理非结构化数据的Best Practice
随着MaxCompute(ODPS)2.0的上线,新增的非结构化数据处理框架也推出一系列的介绍文章,包括 MaxCompute上如何访问OSS数据, 基本功能用法和整体介绍,侧重介绍读取OSS数据进行计算处理; 本文:MaxCompute(ODPS)上处理非结构化数据的Best Practice。
4258 0
Web系统下Office文档的处理 之OpenXml应用分类资料
本文对常见的处理参考和工具提供一个简要的参考。 对于实际的解决方案参考如下地址(有很多的分类知识) http://blogs.msdn.com/b/ericwhite/archive/2008/10/20/eric-white-s-blog-s-table-of-contents.
1096 0
+关注
waylau
大道至简! https://waylau.com/
268
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载