使用 Apache POI 处理 Microsoft Office 文档

原文同步至:http://www.waylau.com/apache-poi-handle-microsoft-documents/

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 示例

参考:

时间: 2024-08-10 14:58:15

使用 Apache POI 处理 Microsoft Office 文档的相关文章

Apache POI -- Java 导出Excel文档(笔记)

一.Action类 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Met

office 文档转pdf

本地先安装 金山wps,并确保可用 工程目录 1.使用前,先执行install.bat 安装jacob 到maven本地仓库 2.复制 jacob-1.18-M2-x64.dlljacob-1.18-M2-x86.dll 到jdk的bin目录 maven的pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.

java读取pdf和MS Office文档

有时候PDF中的文字无法复制,这可能是因为PDF文件加密了,不过使用PDFBox开源软件就可以把它读出来. 还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:FontBox是一个处理PDF字体的java类库:JempBox是一个处理XMP元数据的java类库. 一个简单示例: 要引入pdfbox-app-1.6.0.jar这个包. package pdf; import java.io.File;import java.net.MalformedURLExcep

sharepoint 2013 使用Office Web Apps 查看或编辑office文档时页面出现:“抱歉,出现了问题”错误

sharepoint 使用Office Web Apps 查看或编辑office文档时页面出现:"抱歉,出现了问题"错误 该问题是由于使用了系统账户登录站点而导致的. 更换其他账户登录问题解决. 其他错误还有下面的: 如果 Office Web Apps 在与 SharePoint 2013 结合使用时未正常工作,请查看以下症状并展开相应的标题以查找纠正步骤. 问题:当您选择 SharePoint 库中的"新文档"链接时,系统提示您上载某个文档而不是为您提供用于创建

windows 7 打开sharepoint 2007上的office文档需要输入用户名和密码

在windows 7 的机器上直接打开sharepoint网站正常,但是打开sharepoint 2007上的office文档需要输入用户名和密码. 已加入域.域中xp系统正常. 问题主要是windows 7和vista系统本身导致的 按微软kb的方法修改注册表: After you apply this hotfix, you have to create a registry entry. To do this, follow these steps: Click Start, type r

Java实现web在线预览office文档与pdf文档实例

https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档与pdf文档实例, 1.首先我们需要找到可以把office转换成pdf的方法,查找资料发现有openoffice这一软件可以把office转换成pdf,这一软件先下载下来,然后记住自己安装的在那个位置.然后在cmd环境下进入安装目录的program目 云计算 云服务器ECS 大数据 建站 备案 文档

OFFICE文档(DOC,XLS,PPT)打开报错的解决办法!

一般情况下,打开OFFICE文档报错都是因为模板文件出错!! 至于为什么会出错这个问题不好说,可能是不正确关闭文档等等,重装OFFICE也不一定能解决问题! 出现这种情况一般是所有的Word文档或者EXCLE文档都打不开! 解决办法一:(不保证所有操作系统及环境都适用)进入C:\Documents and Settings\当前用户名\Application Data\Microsoft\Templates\ 将Templates文件夹清空(即删除)然后再试试!—————————————————

java将office文档pdf文档转换成swf文件在线预览

java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org   openoffice.org是一套sun的开源office办公套件,能在widows,linux,solaris等操作系统上执行. 主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库) 笔者下载的是openoffice.org 3.3.0.下载完直接安装即可.      但是,我们还需要启动openof

C#实现office文档转换为PDF格式

需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS 下载地址 [url]http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en[/url] 这是一个微软官方出的office插件. office2010里好像能直接将文件另存为.PDF格式的 安装好之后,打开VS,以VS2005为例