目录

Apache POI - 快速指南

Apache POI - Overview

很多时候,需要一个软件应用程序来生成Microsoft Excel文件格式的报告。 有时,甚至希望应用程序接收Excel文件作为输入数据。 例如,为公司财务部门开发的应用程序将需要在Excel中生成所有输出。

任何想要生成MS Office文件作为输出的Java程序员都必须使用预定义的只读API来执行此操作。

什么是Apache POI?

Apache POI是一种流行的API,允许程序员使用Java程序创建,修改和显示MS Office文件。 它是由Apache Software Foundation开发和分发的开源库,用于使用Java程序设计或修改Microsoft Office文件。 它包含将用户输入数据或文件解码为MS Office文档的类和方法。

Apache POI的组件

Apache POI包含用于处理MS Office的所有OLE2复合文档的类和方法。 该API的组件列表如下。

  • POIFS (可怜的混淆实现文件系统) - 该组件是所有其他POI元素的基本因素。 它用于显式读取不同的文件。

  • HSSF (可怕的电子表格格式) - 用于读取和写入MS-Excel文件的xls格式。

  • XSSF (XML电子表格格式) - 用于MS-Excel的xlsx文件格式。

  • HPSF (可怕的属性集格式) - 用于提取MS-Office文件的property sets

  • HWPF (可怕的字处理器格式) - 用于读写MS-Word的doc扩展文件。

  • XWPF (XML字处理器格式) - 用于读写MS-Word的docx扩展文件。

  • HSLF (可怕的幻灯片布局格式) - 用于阅读,创建和编辑PowerPoint演示文稿。

  • HDGF (可怕的DiaGram格式) - 它包含MS-Visio二进制文件的类和方法。

  • HPBF (可怕的PuBlisher格式) - 用于读写MS-Publisher文件。

本教程将指导您完成使用Java处理Excel文件的过程。 因此,讨论仅限于HSSF和XSSF组件。

Note - 旧版本的POI支持二进制文件格式,如doc,xls,ppt等。版本3.5以后,POI支持MS-Office的OOXML文件格式,如docx,xl​​sx,pptx等。

与Apache POI一样,各种供应商提供了用于生成Excel文件的其他库。 其中包括Aspose cells for Java ,Commons Libraries的JXL和Team Dev的JExcel

Apache POI - Java Excel APIs

本章将向您介绍Java Excel API的一些特性及其功能。 有许多供应商提供与Java Excel相关的API; 其中一些在本章中被考虑。

Aspose Cells for Java

Aspose Cells for Java是由供应商Aspose开发和分发的纯许可Java Excel API。 该API的最新版本是2014年7月发布的8.1.2。它是一个丰富而繁重的API(普通Java类和AWT类的组合),用于设计可以读取,写入和操作电子表格的Excel组件。

该API的常见用途如下 -

  • Excel报告,构建动态Excel报告
  • 高保真Excel渲染和打印
  • 从Excel电子表格导入和导出数据
  • 生成,编辑和转换电子表格

JXL

JXL是为Selenium设计的第三方框架,支持Web浏览器上的数据驱动自动化(Web浏览器上的数据自动更新)。 但是,它也用作JExcel API的通用支持库,因为它具有创建,读取和写入电子表格的基本功能。

基本功能如下 -

  • 生成Excel文件
  • 从工作簿和电子表格导入数据
  • 获取行和列的总数

Note - JXL仅支持.xls文件格式,无法处理大量数据。

JExcel

JExcel是Team Dev提供的纯粹许可API。 使用它,程序员可以轻松地以.xls.xlsx格式读取,编写,显示和修改Excel工作簿。 可以使用Java Swing和AWT轻松嵌入此API。 该API的最新版本是2009年发布的Jexcel-2.6.12。

主要特点如下 -

  • 自动化Excel应用程序,工作簿,电子表格等
  • 将工作簿作为普通Swing组件嵌入Java Swing应用程序中
  • 将事件侦听器添加到工作簿和电子表格中
  • 添加事件处理程序以处理工作簿和电子表格事件的行为
  • 添加本机对等项以开发自定义功能

Apache POI

Apache POI是Apache Software Foundation提供的100%开源库。 大多数中小型应用程序开发人员严重依赖Apache POI(HSSF + XSSF)。 它支持Excel库的所有基本功能; 然而,渲染和文本提取是其主要特征。

圈

Apache POI - Environment

本章将指导您完成在基于Windows和Linux的系统上设置Apache POI的过程。 Apache POI可以通过几个简单的步骤轻松安装并与您当前的Java环境集成,无需任何复杂的设置过程。 安装时需要用户管理。

系统需求 (System Requirements)

JDK Java SE 2 JDK 1.5或以上版本
记忆 1 GB RAM(推荐)
磁盘空间 没有最低要求
操作系统版本 Windows XP或更高版本,Linux

现在让我们继续安装Apache POI的步骤。

第1步:验证Java安装

首先,您需要在系统上安装Java软件开发工具包(SDK)。 要验证这一点,请根据您正在使用的平台执行这两个命令中的任何一个。

如果Java安装已正确完成,那么它将显示Java安装的当前版本和规范。 下表给出了示例输出。

平台 命令 样本输出
Windows

打开命令控制台并输入 -

\》java –version

Java版“1.7.0_60”

Java(TM)SE运行时环境(版本1.7.0_60-b19)

Java Hotspot(TM)64位服务器VM(内置24.60-b09,混合模式)

Linux

打开命令终端并输入 -

$java –version

java版“1.7.0_25”

打开JDK运行时环境(rhel-2.3.10.4.el6_4-x86_64)

打开JDK 64位服务器VM(内置23.7-b01,混合模式)

第2步:设置Java环境

将环境变量JAVA_HOME设置为指向计算机上安装Java的基本目录位置。 例如,

Sr.No. 平台和描述
1

Windows

将JAVA_HOME设置为C:\ProgramFiles\java\jdk1.7.0_60

2

Linux

导出JAVA_HOME =/usr/local/java-current

将Java编译器位置的完整路径附加到系统路径。

Sr.No. 平台和描述
1

Windows

将字符串“C:\Program Files\Java\jdk1.7.0_60\bin”附加到系统变量PATH的末尾。

2

Linux

导出PATH = $ PATH:$ JAVA_HOME/bin/

如上所述,从命令提示符执行命令java -version

第3步:安装Apache POI库

https://poi.apache.org/download.html下载最新版本的Apache POI,并将其内容解压缩到一个文件夹,从该文件夹可以将所需的库链接到您的Java程序。 我们假设文件收集在C盘上的文件夹中。

下图显示了下载文件夹中的目录和文件结构。

罐

罐

将上图中突出显示的五个jars的完整路径添加到CLASSPATH。

Sr.No. 平台和描述
1

Windows

将以下字符串附加到用户变量的末尾

CLASSPATH -

“C:\POI-3.9\POI-3.9-20121203.jar;”

“C:\POI-3.9\POI-OOXML-3.9-20121203.jar;”

“C:\POI-3.9\POI-OOXML-架构 - 3.9-20121203.jar;”

“C:\POI-3.9\OOXML-LIB\DOM4J-1.6.1.jar;”

“C:\POI-3.9\OOXML-LIB \的xmlbeans-2.3.0.jar;”

2

Linux

导出CLASSPATH = $ CLASSPATH:

/usr/share/poi-3.9/poi-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-schemas-3.9-20121203.tar:

/usr/share/poi-3.9/poi-ooxml-3.9-20121203.tar:

/usr/share/poi-3.9/ooxml-lib/dom4j-1.6.1.tar:

/usr/share/poi-3.9/ooxml-lib/xmlbeans-2.3.0.tar

Apache POI – Core Classes

本章介绍Apache POI API下的一些类和方法,这些类和方法对使用Java程序处理Excel文件至关重要。

Workbook

这是创建或维护Excel工作簿的所有类的超级接口。 它属于org.apache.poi.ss.usermodel包。 实现此接口的两个类如下 -

  • HSSFWorkbook - 此类具有以.xls格式读取和写入Microsoft Excel文件的方法。 它与MS-Office版本97-2003兼容。

  • XSSFWorkbook - 此类具有以.xls或.xlsx格式读取和写入Microsoft Excel和OpenOffice xml文件的方法。 它与MS-Office 2007或更高版本兼容。

HSSFWorkbook

它是org.apache.poi.hssf.usermodel包下的高级类。 它实现了Workbook接口,用于.xls格式的Excel文件。 下面列出了此类下的一些方法和构造函数。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

HSSFWorkbook()

从头开始创建新的HSSFWorkbook对象。

2

HSSFWorkbook(DirectoryNode directory, boolean preserveNodes)

在特定目录中创建新的HSSFWworkbook对象。

3

HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)

给定POIFSFileSystem对象及其中的特定目录,它会创建一个SSFWorkbook对象来读取指定的工作簿。

4

HSSFWorkbook(java.io.InputStream s)

使用输入流创建新的HSSFWorkbook对象。

5

HSSFWorkbook(java.io.InputStream s, boolean preserveNodes)

围绕输入流构造POI文件系统。

6

HSSFWorkbook(POIFSFileSystem fs)

使用POIFSFileSystem对象构造新的HSSFWorkbook对象。

7

HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)

给定POIFSFileSystem对象,它会创建一个新的HSSFWorkbook对象来读取指定的工作簿。

这些构造函数中经常使用的参数是 -

  • directory - 要处理的POI文件系统目录。

  • fs - 包含工作簿流的​​POI文件系统。

  • preservenodes - 这是一个可选参数,用于决定是否保留其他节点,如宏。 它占用大量内存,因为它将所有POIFileSystem存储在内存中(如果已设置)。

Note - HSSFWorkbook类包含许多方法; 但它们仅与xls格式兼容。 在本教程中,重点是最新版本的Excel文件格式。 因此,此处未列出HSSFWorkbook的类方法。 如果您需要这些类方法,请参阅https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html. POI-HSSFWorkbook类API https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html.

XSSFWorkbook

它是一个用于表示高级和低级Excel文件格式的类。 它属于org.apache.xssf.usemodel包并实现Workbook接口。 下面列出了此类下的方法和构造函数。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

XSSFWorkbook()

从头开始创建新的XSSFworkbook对象。

2

XSSFWorkbook(java.io.File file)

根据给定文件构造XSSFWorkbook对象。

3

XSSFWorkbook(java.io.InputStream is)

构造一个XSSFWorkbook对象,将整个输入流缓冲到内存中,然后为它打开一个OPCPackage对象。

4

XSSFWorkbook(java.lang.String path)

给定文件的完整路径,构造一个XSSFWorkbook对象。

类方法 (Class Methods)

Sr.No. 方法和描述
1

createSheet()

为此工作簿创建一个XSSFSheet,将其添加到工作表,然后返回高级表示。

2

createSheet(java.lang.String sheetname)

为此工作簿创建一个新工作表并返回高级表示。

3

createFont()

创建一个新字体并将其添加到工作簿的字体表中。

4

createCellStyle()

创建一个新的XSSFCellStyle并将其添加到工作簿的样式表中。

5

createFont()

创建一个新字体并将其添加到工作簿的字体表中。

6

setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow,int endRow)

根据指定的参数设置给定图纸的打印区域。

有关此类的其余方法,请参阅完整的API文档: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html. : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html. 获取完整的方法列表。

Sheet

Sheet是org.apache.poi.ss.usermodel包下的一个接口,它是所有类的超级接口,可以创建具有特定名称的高级或低级电子表格。 最常见的电子表格类型是工作表,它表示为单元格网格。

HSSFSheet

这是org.apache.poi.hssf.usermodel包下的一个类。 它可以创建excel电子表格,并允许格式化工作表样式和工作表数据。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

HSSFSheet(HSSFWorkbook workbook)

创建由HSSFWorkbook调用的新HSSFSheet以从头开始创建工作表。

2

HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)

创建表示给定工作表对象的HSSFSheet。

XSSFSheet

这是一个表示excel电子表格的高级表示的类。 它位于org.apache.poi.hssf.usermodel包下。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

XSSFSheet()

创建新的XSSFSheet - 由XSSFWorkbook调用以从头开始创建工作表。

2

XSSFSheet(PackagePart part, PackageRelationship rel)

创建表示给定包部件和关系的XSSFSheet。

类方法 (Class Methods)

Sr.No. 方法和描述
1

addMergedRegion(CellRangeAddress region)

添加合并的单元格区域(因此这些单元格形成一个)。

2

autoSizeColumn(int column)

调整列宽以适合内容。

3

iterator()

此方法是rowIterator()的别名,以允许foreach循环

4

addHyperlink(XSSFHyperlink hyperlink)

在此工作表的超链接集合中注册超链接

有关此类的其余方法,请参阅完整的API: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html. : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFSheet.html.

Row

这是org.apache.poi.ss.usermodel包下的接口。 它用于电子表格行的高级表示。 它是表示POI库中行的所有类的超级接口。

XSSFRow

这是org.apache.poi.xssf.usermodel包下的一个类。 它实现了Row接口,因此可以在电子表格中创建行。 下面列出了此类下的方法和构造函数。

类方法 (Class Methods)

Sr.No. 方法和描述
1

createCell(int columnIndex)

在行中创建新单元格并返回它。

2

setHeight(short height)

以短单位设置高度。

对于此类的其余方法,请按照给定的链接https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

Cell

这是org.apache.poi.ss.usermodel包下的接口。 它是表示电子表格行中单元格的所有类的超级接口。

单元格可以采用各种属性,如空白,数字,日期,错误等。单元格在添加到行之前应该有自己的数字(基于0)。

XSSFCell

这是org.apache.poi.xssf.usermodel包下的一个类。 它实现了Cell接口。 它是电子表格行中单元格的高级表示。

现场总结

下面列出了XSSFCell类的一些字段及其描述。

Sr.No. 细胞类型和描述
1

CELL_TYPE_BLANK

表示空白单元格

2

CELL_TYPE_BOOLEAN

表示布尔单元格(true或false)

3

CELL_TYPE_ERROR

表示单元格上的错误值

4

CELL_TYPE_FORMULA

表示单元格上的公式结果

5

CELL_TYPE_NUMERIC

表示单元格上的数字数据

6

CELL_TYPE_STRING

表示单元格上的字符串(文本)

类方法 (Class Methods)

Sr.No. 方法和描述
1

setCellStyle(CellStyle style)

设置单元格的样式。

2

setCellType(int cellType)

设置单元格的类型(数字,公式或字符串)。

3

setCellValue(boolean value)

设置单元格的布尔值。

4

setCellValue(java.util.Calendar value)

设置单元格的日期值。

5

setCellValue(double value)

设置单元格的数值。

6

setCellValue(java.lang.String str)

设置单元格的字符串值。

7

setHyperlink(Hyperlink hyperlink)

为此单元格指定超链接。

有关此类的其余方法和字段,请访问以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCell.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCell.html

XSSFCellStyle

这是org.apache.poi.xssf.usermodel包下的一个类。 它将提供有关电子表格单元格中内容格式的可能信息。 它还提供了修改该格式的选项。 它实现了CellStyle接口。

现场总结

下表列出了从CellStyle接口继承的一些字段。

Sr.No. 领域和描述
1

ALIGN_CENTER

中心对齐细胞内容

2

ALIGN_CENTER_SELECTION

中心选择水平对齐

3

ALIGN_FILL

单元格适合内容大小

4

ALIGN_JUSTIFY

使细胞内容适合其宽度

5

ALIGN_LEFT

左对齐单元格内容

6

ALIGN_RIGHT

右对齐单元格内容

7

BORDER_DASH_DOT

带有破折号和点的单元格样式

8

BORDER_DOTTED

带有虚线边框的单元格样式

9

BORDER_DASHED

带有虚线边框的单元格样式

10

BORDER_THICK

细胞风格与厚边框

11

BORDER_THIN

细胞风格与薄边框

12

VERTICAL_BOTTOM

将细胞内容物垂直对齐

13

VERTICAL_CENTER

对齐单元格内容垂直中心

15

VERTICAL_JUSTIFY

垂直对齐并对齐单元格内容

16

VERTICAL_TOP

顶部对齐垂直对齐

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

XSSFCellStyle(int cellXfId, int cellStyleXfId, StylesTable stylesSource, ThemesTable theme)

从提供的零件创建单元格样式

2

XSSFCellStyle(StylesTable stylesSource)

创建一个空单元格样式

类方法 (Class Methods)

S.No 方法和描述
1

setAlignment(short align)

设置单元格的水平对齐类型

2

setBorderBottom(short border)

设置单元格底部边框的边框类型

3

setBorderColor(XSSFCellBorder.BorderSide side, XSSFColor color)

设置所选边框的颜色

4

setBorderLeft(Short border)

设置单元格左边框的边框类型

5

setBorderRight(short border)

设置单元格右边框的边框类型

6

setBorderTop(short border)

设置单元格顶部边框的边框类型

7

setFillBackgroundColor(XSSFColor color)

设置表示为XSSFColor值的背景填充颜色。

8

setFillForegroundColor(XSSFColor color)

设置表示为XSSFColor值的前景填充颜色。

9

setFillPattern(short fp)

指定图案和纯色单元格填充的单元格填充信息。

10

setFont(Font font)

设置此样式的字体。

11

setRotation(short rotation)

设置单元格中文本的旋转度。

12

setVerticalAlignment(short align)

设置单元格的垂直对齐类型。

对于此类中的其余方法和字段,请通过以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html

HSSFColor

这是org.apache.poi.hssf.util包下的一个类。 它提供不同的颜色作为嵌套类。 通常这些嵌套类使用它们自己的索引来表示。 它实现了Color接口。

嵌套类

此类的所有嵌套类都是静态的,每个类都有其索引。 这些嵌套颜色类用于单元格格式,例如单元格内容,边框,前景和背景。 下面列出了一些嵌套类。

Sr.No. class名称(颜色)
1HSSFColor.AQUA
2HSSFColor.AUTOMATIC
3HSSFColor.BLACK
4HSSFColor.BLUE
5HSSFColor.BRIGHT_GREEN
6HSSFColor.BRIGHT_GRAY
7HSSFColor.CORAL
8HSSFColor.DARK_BLUE
9HSSFColor.DARK_GREEN
10HSSFColor.SKY_BLUE
11HSSFColor.WHITE
12HSSFColor.YELLOW

类方法 (Class Methods)

此类中只有一个方法很重要,用于获取索引值。

Sr.No. 方法和描述
1

getIndex()

此方法用于获取嵌套类的索引值。

有关其余方法和嵌套类,请参阅以下链接: https://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html : https://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html

XSSFColor

这是org.apache.poi.xssf.usermodel包下的一个类。 它用于表示电子表格中的颜色。 它实现了Color接口。 下面列出了它的一些方法和构造函数。

类构造函数 (Class Constructors)

Sr.No. 构造函数和描述
1

XSSFColor()

创建XSSFColor的新实例。

2

XSSFColor(byte[] rgb)

使用RGB创建XSSFColor的新实例。

3

XSSFColor(java.awt.Color clr)

使用awt包中的Color类创建XSSFColor的新实例。

类方法 (Class Methods)

Sr.No. 方法和描述
1

setAuto(boolean auto)

设置一个布尔值,表示ctColor是自动的,系统ctColor是依赖的。

2

setIndexed(int indexed)

将索引的ctColor值设置为system ctColor。

对于其余方法,请访问以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFColor.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFColor.html

XSSFFont

这是org.apache.poi.xssf.usermodel包下的一个类。 它实现了Font接口,因此它可以处理工作簿中的不同字体。

类构造函数 (Class Constructor)

Sr.No. 构造函数和描述
1

XSSFFont()

创建一个新的XSSFont实例。

类方法 (Class Methods)

Sr.No. 方法和描述
1

setBold(boolean bold)

为“bold”属性设置布尔值。

2

setColor(short color)

设置字体的索引颜色。

3

setColor(XSSFColor color)

设置标准Alpha RGB颜色值中字体的颜色。

4

setFontHeight(short height)

以磅为单位设置字体高度。

5

setFontName(java.lang.String name)

设置字体的名称。

6

setItalic(boolean italic)

为'italic'属性设置布尔值。

对于其余方法,请访问以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFFont.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFFont.html

XSSFHyperlink

这是org.apache.poi.xssf.usermodel包下的一个类。 它实现了Hyperlink接口。 它用于设置指向电子表格单元格内容的超链接。

Fields

该类的字段如下。 这里,字段表示使用的超链接类型。

Sr.No. 领域和描述
1

LINK_DOCUMENT

用于链接任何其他文档

2

LINK_EMAIL

用于链接电子邮件

3

LINK_FILE

用于链接任何格式的任何其他文件

4

LINK_URL

用于链接Web URL

类方法 (Class Methods)

Sr.No. 方法和描述
1

setAddress(java.lang.String address)

超链接地址。

对于其余方法,请访问以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFHyperlink.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFHyperlink.html

XSSFCreationHelper

这是org.apache.poi.xssf.usermodel包下的一个类。 它实现了CreationHelper接口。 它用作公式评估和设置超链接的支持类。

类方法

Sr.No. 方法和描述
1

createFormulaEvaluator()

创建一个XSSFFormulaEvaluator实例,该实例是评估公式单元格的对象。

2

createHyperlink(int type)

创建一个新的XSSFHyperlink。

有关其余方法,请参阅以下链接: https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCreationHelper.html : https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCreationHelper.html

XSSFPrintSetup

这是org.apache.poi.xsssf.usermodel包下的一个类。 它实现了PrintSetup接口。 它用于设置打印页面大小,区域,选项和设置。

类方法 (Class Methods)

Sr.No. 方法和描述
1

setLandscape(boolean ls)

设置布尔值以允许或阻止横向打印。

2

setLeftToRight(boolean ltor)

设置打印时是否从左到右或从上到下排序。

3

setPaperSize(short size)

设置纸张尺寸。

对于其余方法,请访问以下链接: https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFPrintSetup.html : https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFPrintSetup.html

Apache POI – Workbooks

这里的术语“工作簿”表示Microsoft Excel文件。 完成本章后,您将能够使用Java程序创建新的工作簿并打开现有的工作簿。

创建空白工作簿

以下简单程序用于创建空白Microsoft Excel工作簿。

import java.io.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateWorkBook {
   public static void main(String[] args)throws Exception {
      //Create Blank workbook
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      //Create file system using specific name
      FileOutputStream out = new FileOutputStream(new File("createworkbook.xlsx"));
      //write operation workbook using file out object 
      workbook.write(out);
      out.close();
      System.out.println("createworkbook.xlsx written successfully");
   }
}

让我们将上述Java代码保存为CreateWorkBook.java ,然后从命令提示符编译并执行它,如下所示 -

$javac CreateWorkBook.java
$java CreateWorkBook

如果您的系统环境配置了POI库,它将编译并执行以在当前目录中生成名为createworkbook.xlsx的空白Excel文件,并在命令提示符中显示以下输出。

createworkbook.xlsx written successfully

打开现有工作簿

使用以下代码打开现有工作簿。

import java.io.*;
import org.apache.poi.xssf.usermodel.*;
public class OpenWorkBook {
   public static void main(String args[])throws Exception { 
      File file = new File("openworkbook.xlsx");
      FileInputStream fIP = new FileInputStream(file);
      //Get the workbook instance for XLSX file 
      XSSFWorkbook workbook = new XSSFWorkbook(fIP);
      if(file.isFile() && file.exists()) {
         System.out.println("openworkbook.xlsx file open successfully.");
      } else {
         System.out.println("Error to open openworkbook.xlsx file.");
      }
   }
}

将上述Java代码保存为OpenWorkBook.java ,然后从命令提示符编译并执行它,如下所示 -

$javac OpenWorkBook.java
$java OpenWorkBook

它将编译并执行以生成以下输出。

openworkbook.xlsx file open successfully.

打开工作簿后,您可以对其执行读写操作。

Apache POI – Spreadsheets

本章介绍如何使用Java创建电子表格并对其进行操作。 电子表格是Excel文件中的页面; 它包含具有特定名称的行和列。

完成本章后,您将能够创建电子表格并对其执行读取操作。

创建电子表格

首先,让我们使用前面章节中讨论的引用类创建一个电子表格。 按照上一章的说法,首先创建一个工作簿,然后我们可以继续创建一个工作表。

以下代码段用于创建电子表格。

//Create Blank workbook
XSSFWorkbook workbook = new XSSFWorkbook();
//Create a blank spreadsheet
XSSFSheet spreadsheet = workbook.createSheet("Sheet Name");

电子表格上的行

电子表格具有网格布局。 行和列用特定名称标识。 列用字母和带数字的行标识。

以下代码段用于创建行。

XSSFRow row = spreadsheet.createRow((short)1);

写入电子表格

让我们考虑一下员工数据的一个例子。 这里的员工数据以表格形式给出。

Emp Id Emp名称 指定
Tp01Gopal 技术经理
TP02ManishaProof Reader
Tp03Masthan 技术文件撰稿人
Tp04Satish 技术文件撰稿人
Tp05Krishna 技术文件撰稿人

以下代码用于将上述数据写入电子表格。

import java.io.File;
import java.io.FileOutputStream;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Writesheet {
   public static void main(String[] args) throws Exception {
      //Create blank workbook
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      //Create a blank sheet
      XSSFSheet spreadsheet = workbook.createSheet(" Employee Info ");
      //Create row object
      XSSFRow row;
      //This data needs to be written (Object[])
      Map < String, Object[] > empinfo = 
      new TreeMap < String, Object[] >();
      empinfo.put( "1", new Object[] { "EMP ID", "EMP NAME", "DESIGNATION" });
      empinfo.put( "2", new Object[] { "tp01", "Gopal", "Technical Manager" });
      empinfo.put( "3", new Object[] { "tp02", "Manisha", "Proof Reader" });
      empinfo.put( "4", new Object[] { "tp03", "Masthan", "Technical Writer" });
      empinfo.put( "5", new Object[] { "tp04", "Satish", "Technical Writer" });
      empinfo.put( "6", new Object[] { "tp05", "Krishna", "Technical Writer" });
      //Iterate over data and write to sheet
      Set < String > keyid = empinfo.keySet();
      int rowid = 0;
      for (String key : keyid) {
         row = spreadsheet.createRow(rowid++);
         Object [] objectArr = empinfo.get(key);
         int cellid = 0;
         for (Object obj : objectArr) {
            Cell cell = row.createCell(cellid++);
            cell.setCellValue((String)obj);
         }
      }
      //Write the workbook in file system
      FileOutputStream out = new FileOutputStream(new File("Writesheet.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("Writesheet.xlsx written successfully");
   }
}

将上述Java代码保存为Writesheet.java ,然后从命令提示符编译并运行它,如下所示 -

$javac Writesheet.java
$java Writesheet

它将编译并执行以在当前目录中生成名为Writesheet.xlsx的Excel文件,您将在命令提示符中获得以下输出。

Writesheet.xlsx written successfully

Writesheet.xlsx文件如下所示。

Writesheet

从电子表格中读取

让我们考虑上面名为Writesheet.xslx excel文件作为输入。 请注意以下代码; 它用于从电子表格中读取数据。

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Readsheet {
   static XSSFRow row;
   public static void main(String[] args) throws Exception {
      FileInputStream fis = new FileInputStream(new File("WriteSheet.xlsx"));
      XSSFWorkbook workbook = new XSSFWorkbook(fis);
      XSSFSheet spreadsheet = workbook.getSheetAt(0);
      Iterator < Row >  rowIterator = spreadsheet.iterator();
      while (rowIterator.hasNext()) {
         row = (XSSFRow) rowIterator.next();
         Iterator < Cell >  cellIterator = row.cellIterator();
         while ( cellIterator.hasNext()) {
            Cell cell = cellIterator.next();
            switch (cell.getCellType()) {
               case Cell.CELL_TYPE_NUMERIC:
                  System.out.print(cell.getNumericCellValue() + " \t\t ");
                  break;
               case Cell.CELL_TYPE_STRING:
                  System.out.print(
                  cell.getStringCellValue() + " \t\t ");
                  break;
            }
         }
         System.out.println();
      }
      fis.close();
   }
}

让我们将上面的代码保存在Readsheet.java文件中,然后从命令提示符编译并运行它,如下所示 -

$javac Readsheet.java
$java Readsheet

如果您的系统环境配置了POI库,它将编译并执行以在命令提示符中生成以下输出。

EMP ID   EMP NAME       DESIGNATION 
 tp01     Gopal       Technical Manager 
 tp02     Manisha     Proof Reader 
 tp03     Masthan     Technical Writer 
 tp04     Satish      Technical Writer 
 tp05     Krishna     Technical Writer

Apache POI – Cells

您输入电子表格的任何数据始终存储在单元格中。 我们使用行和列的标签来标识单元格。 本章介绍如何使用Java编程在电子表格中操作单元格中的数据。

创建一个单元格

您需要在创建单元格之前创建一行。 一行只是一组细胞。

以下代码段用于创建单元格。

//create new workbook
XSSFWorkbook workbook = new XSSFWorkbook(); 
//create spreadsheet with a name
XSSFSheet spreadsheet = workbook.createSheet("new sheet");
//create first row on a created spreadsheet
XSSFRow row = spreadsheet.createRow(0);
//create first cell on created row
XSSFCell cell = row.createCell(0);

细胞类型

单元格类型指定单元格是否可以包含字符串,数值或公式。 字符串单元格不能保存数值,而数字单元格不能保存字符串。 下面给出了单元格的类型,它们的值和类型语法。

单元格值的类型 键入语法
Blank cell valueXSSFCell.CELL_TYPE_BLANK
Boolean cell valueXSSFCell.CELL.TYPE_BOOLEAN
Error cell valueXSSFCell.CELL_TYPE_ERROR
Numeric cell valueXSSFCell.CELL_TYPE_NUMERIC
字符串单元格值 XSSFCell.CELL_TYPE_STRING

以下代码用于在电子表格中创建不同类型的单元格。

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TypesofCells {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("cell types");
      XSSFRow row = spreadsheet.createRow((short) 2);
      row.createCell(0).setCellValue("Type of Cell");
      row.createCell(1).setCellValue("cell value");
      row = spreadsheet.createRow((short) 3);
      row.createCell(0).setCellValue("set cell type BLANK");
      row.createCell(1);
      row = spreadsheet.createRow((short) 4);
      row.createCell(0).setCellValue("set cell type BOOLEAN");
      row.createCell(1).setCellValue(true);
      row = spreadsheet.createRow((short) 5);
      row.createCell(0).setCellValue("set cell type ERROR");
      row.createCell(1).setCellValue(XSSFCell.CELL_TYPE_ERROR );
      row = spreadsheet.createRow((short) 6);
      row.createCell(0).setCellValue("set cell type date");
      row.createCell(1).setCellValue(new Date());
      row = spreadsheet.createRow((short) 7);
      row.createCell(0).setCellValue("set cell type numeric");
      row.createCell(1).setCellValue(20 );
      row = spreadsheet.createRow((short) 8);
      row.createCell(0).setCellValue("set cell type string");
      row.createCell(1).setCellValue("A String");
      FileOutputStream out = new FileOutputStream(new File("typesofcells.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("typesofcells.xlsx written successfully");
   }
}

将上述代码保存在名为TypesofCells.java的文件中,从命令提示符处编译并执行它,如下所示。

$javac TypesofCells.java
$java TypesofCells

如果您的系统配置了POI库,那么它将编译并执行以在当前目录中生成名为typesofcells.xlsx的Excel文件,并显示以下输出。

typesofcells.xlsx written successfully

typesofcells.xlsx文件如下所示。

细胞类型

细胞样式

在这里,您可以学习如何进行单元格格式化并应用不同的样式,例如合并相邻单元格,添加边框,设置单元格对齐和填充颜色。

以下代码用于使用Java编程将不同样式应用于单元格。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CellStyle {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("cellstyle");
      XSSFRow row = spreadsheet.createRow((short) 1);
      row.setHeight((short) 800);
      XSSFCell cell = (XSSFCell) row.createCell((short) 1);
      cell.setCellValue("test of merging");
      //MEARGING CELLS 
      //this statement for merging cells
      spreadsheet.addMergedRegion(
         new CellRangeAddress(
            1, //first row (0-based)
            1, //last row (0-based)
            1, //first column (0-based)
            4 //last column (0-based)
         )
      );
      //CELL Alignment
      row = spreadsheet.createRow(5); 
      cell = (XSSFCell) row.createCell(0);
      row.setHeight((short) 800);
      // Top Left alignment 
      XSSFCellStyle style1 = workbook.createCellStyle();
      spreadsheet.setColumnWidth(0, 8000);
      style1.setAlignment(XSSFCellStyle.ALIGN_LEFT);
      style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP);
      cell.setCellValue("Top Left");
      cell.setCellStyle(style1);
      row = spreadsheet.createRow(6); 
      cell = (XSSFCell) row.createCell(1);
      row.setHeight((short) 800);
      // Center Align Cell Contents 
      XSSFCellStyle style2 = workbook.createCellStyle();
      style2.setAlignment(XSSFCellStyle.ALIGN_CENTER);
      style2.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
      cell.setCellValue("Center Aligned"); 
      cell.setCellStyle(style2);
      row = spreadsheet.createRow(7); 
      cell = (XSSFCell) row.createCell(2);
      row.setHeight((short) 800);
      // Bottom Right alignment 
      XSSFCellStyle style3 = workbook.createCellStyle();
      style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
      style3.setVerticalAlignment(XSSFCellStyle.VERTICAL_BOTTOM);
      cell.setCellValue("Bottom Right");
      cell.setCellStyle(style3);
      row = spreadsheet.createRow(8);
      cell = (XSSFCell) row.createCell(3);
      // Justified Alignment 
      XSSFCellStyle style4 = workbook.createCellStyle();
      style4.setAlignment(XSSFCellStyle.ALIGN_JUSTIFY);
      style4.setVerticalAlignment(XSSFCellStyle.VERTICAL_JUSTIFY);
      cell.setCellValue("Contents are Justified in Alignment"); 
      cell.setCellStyle(style4);
      //CELL BORDER
      row = spreadsheet.createRow((short) 10);
      row.setHeight((short) 800);
      cell = (XSSFCell) row.createCell((short) 1);
      cell.setCellValue("BORDER");
      XSSFCellStyle style5 = workbook.createCellStyle();
      style5.setBorderBottom(XSSFCellStyle.BORDER_THICK);
      style5.setBottomBorderColor(IndexedColors.BLUE.getIndex());
      style5.setBorderLeft(XSSFCellStyle.BORDER_DOUBLE);
      style5.setLeftBorderColor(IndexedColors.GREEN.getIndex());
      style5.setBorderRight(XSSFCellStyle.BORDER_HAIR);
      style5.setRightBorderColor(IndexedColors.RED.getIndex());
      style5.setBorderTop(XSSFCellStyle.BIG_SPOTS);
      style5.setTopBorderColor(IndexedColors.CORAL.getIndex());
      cell.setCellStyle(style5);
      //Fill Colors
      //background color
      row = spreadsheet.createRow((short) 10 );
      cell = (XSSFCell) row.createCell((short) 1);
      XSSFCellStyle style6 = workbook.createCellStyle();
      style6.setFillBackgroundColor(HSSFColor.LEMON_CHIFFON.index );
      style6.setFillPattern(XSSFCellStyle.LESS_DOTS);
      style6.setAlignment(XSSFCellStyle.ALIGN_FILL);
      spreadsheet.setColumnWidth(1,8000);
      cell.setCellValue("FILL BACKGROUNG/FILL PATTERN");
      cell.setCellStyle(style6);
      //Foreground color
      row = spreadsheet.createRow((short) 12);
      cell = (XSSFCell) row.createCell((short) 1);
      XSSFCellStyle style7 = workbook.createCellStyle();
      style7.setFillForegroundColor(HSSFColor.BLUE.index);
      style7.setFillPattern( XSSFCellStyle.LESS_DOTS);
      style7.setAlignment(XSSFCellStyle.ALIGN_FILL);
      cell.setCellValue("FILL FOREGROUND/FILL PATTERN");
      cell.setCellStyle(style7);
      FileOutputStream out = new FileOutputStream(new File("cellstyle.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("cellstyle.xlsx written successfully");
   }
}

将上述代码保存在名为CellStyle.java的文件中,从命令提示符处编译并执行它,如下所示。

$javac CellStyle.java
$java CellStyle

它将在当前目录中生成名为cellstyle.xlsx的Excel文件,并显示以下输出。

cellstyle.xlsx written successfully

cellstyle.xlsx文件如下所示。

CellStyle

Apache POI – Fonts

本章介绍如何在Excel电子表格中以不同的方向角设置不同的字体,应用样式和显示文本。

每个系统都捆绑了大量字体,如Arial,Impact,Times New Roman等。如果需要,还可以使用新字体更新集合。 类似地,有各种样式可以显示字体,例如粗体,斜体,下划线,穿透等。

字体和字体样式

以下代码用于将特定字体和样式应用于单元格的内容。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class FontStyle {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("Fontstyle");
      XSSFRow row = spreadsheet.createRow(2);
      //Create a new font and alter it.
      XSSFFont font = workbook.createFont();
      font.setFontHeightInPoints((short) 30);
      font.setFontName("IMPACT");
      font.setItalic(true);
      font.setColor(HSSFColor.BRIGHT_GREEN.index);
      //Set font into style
      XSSFCellStyle style = workbook.createCellStyle();
      style.setFont(font);
      // Create a cell with a value and set style to it.
      XSSFCell cell = row.createCell(1);
      cell.setCellValue("Font Style");
      cell.setCellStyle(style);
      FileOutputStream out = new FileOutputStream(new File("fontstyle.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("fontstyle.xlsx written successfully");
   }
}

让我们将上面的代码保存在名为FontStyle.java的文件中。 从命令提示符编译并执行它,如下所示。

$javac FontStyle.java
$java FontStyle

它会在当前目录中生成名为fontstyle.xlsx的Excel文件,并在命令提示符下显示以下输出。

fontstyle.xlsx written successfully

fontstyle.xlsx文件如下所示。

字体样式

文字方向

在这里,您可以学习如何以不同的角度设置文本方向。 通常,单元格内容从左到右水平显示,并以00角度显示; 但是,如果需要,您可以使用以下代码旋转文本方向。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TextDirection {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("Text direction");
      XSSFRow row = spreadsheet.createRow(2);
      XSSFCellStyle myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 0);
      XSSFCell cell = row.createCell(1);
      cell.setCellValue("0D angle");
      cell.setCellStyle(myStyle);
      //30 degrees
      myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 30);
      cell = row.createCell(3);
      cell.setCellValue("30D angle");
      cell.setCellStyle(myStyle);
      //90 degrees
      myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 90);
      cell = row.createCell(5);
      cell.setCellValue("90D angle");
      cell.setCellStyle(myStyle);
      //120 degrees
      myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 120);
      cell = row.createCell(7);
      cell.setCellValue("120D angle");
      cell.setCellStyle(myStyle);
      //270 degrees
      myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 270);
      cell = row.createCell(9);
      cell.setCellValue("270D angle");
      cell.setCellStyle(myStyle);
      //360 degrees
      myStyle = workbook.createCellStyle();
      myStyle.setRotation((short) 360);
      cell = row.createCell(12);
      cell.setCellValue("360D angle");
      cell.setCellStyle(myStyle);
      FileOutputStream out = new FileOutputStream(new File("textdirection.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("textdirection.xlsx written successfully");
   }
}

将上面的代码保存在TextDirectin.java文件中,然后从命令提示符处编译并执行它,如下所示。

$javac TextDirection.java
$java TextDirection

它将编译并执行以在当前目录中生成名为textdirection.xlsx的Excel文件,并在命令提示符下显示以下输出。

textdirection.xlsx written successfully

textdirection.xlsx文件如下所示。

TextDirectin

Apache POI – Formula

本章将指导您使用Java编程在单元格上应用不同的公式。 Excel应用程序的基本目的是通过在其上应用公式来维护数值数据。

在公式中,我们传递Excel工作表中值的动态值或位置。 执行此公式时,您将获得所需的结果。 下表列出了Excel中经常使用的一些基本公式。

手术 句法
Adding multiple numbers = SUM(Loc1:Locn) or = SUM(n1,n2,)
Count = COUNT(Loc1:Locn) or = COUNT(n1,n2,)
Power of two numbers = POWER(Loc1,Loc2) or = POWER(数字,功率)
Max of multiple numbers = MAX(Loc1:Locn) or = MAX(n1,n2,)
Product = PRODUCT(Loc1:Locn) or = PRODUCT(n1,n2,)
Factorial = FACT(Locn) or = FACT(数字)
Absolute number = ABS(Locn) or = ABS(数字)
Today date=TODAY()
Converts lowercase = LOWER(Locn) or = LOWER(文本)
平方根 = SQRT(locn) or = SQRT(数字)

以下代码用于向单元格添加公式并执行它。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Formula {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("formula");
      XSSFRow row = spreadsheet.createRow(1);
      XSSFCell cell = row.createCell(1);
      cell.setCellValue("A = ");
      cell = row.createCell(2);
      cell.setCellValue(2);
      row = spreadsheet.createRow(2);
      cell = row.createCell(1);
      cell.setCellValue("B = ");
      cell = row.createCell(2);
      cell.setCellValue(4);
      row = spreadsheet.createRow(3);
      cell = row.createCell(1);
      cell.setCellValue("Total = ");
      cell = row.createCell(2);
      // Create SUM formula
      cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
      cell.setCellFormula("SUM(C2:C3)");
      cell = row.createCell(3);
      cell.setCellValue("SUM(C2:C3)");
      row = spreadsheet.createRow(4);
      cell = row.createCell(1);
      cell.setCellValue("POWER =");
      cell=row.createCell(2);
      // Create POWER formula
      cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
      cell.setCellFormula("POWER(C2,C3)");
      cell = row.createCell(3);
      cell.setCellValue("POWER(C2,C3)");
      row = spreadsheet.createRow(5);
      cell = row.createCell(1);
      cell.setCellValue("MAX = ");
      cell = row.createCell(2);
      // Create MAX formula
      cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
      cell.setCellFormula("MAX(C2,C3)");
      cell = row.createCell(3);
      cell.setCellValue("MAX(C2,C3)");
      row = spreadsheet.createRow(6);
      cell = row.createCell(1);
      cell.setCellValue("FACT = ");
      cell = row.createCell(2);
      // Create FACT formula
      cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
      cell.setCellFormula("FACT(C3)");
      cell = row.createCell(3);
      cell.setCellValue("FACT(C3)");
      row = spreadsheet.createRow(7);
      cell = row.createCell(1);
      cell.setCellValue("SQRT = ");
      cell = row.createCell(2);
      // Create SQRT formula
      cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
      cell.setCellFormula("SQRT(C5)");
      cell = row.createCell(3);
      cell.setCellValue("SQRT(C5)");
      workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
      FileOutputStream out = new FileOutputStream(new File("formula.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("fromula.xlsx written successfully");
   }
}

将上面的代码保存为Formula.java ,然后从命令提示符编译并执行它,如下所示。

$javac Formula.java
$java Formula

它将在当前目录中生成名为formula.xlsx的Excel文件,并在命令提示符下显示以下输出。

fromula.xlsx written successfully

formula.xlsx文件如下所示。

式

Apache POI – Hyperlink

本章介绍如何向单元格中的内容添加超链接。 通常,超链接用于访问任何Web URL,电子邮件或外部文件。

以下代码显示如何在单元格上创建超链接。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.common.usermodel.Hyperlink;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFHyperlink;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class HyperlinkEX {
   public static void main(String[] args) throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("Hyperlinks");
      XSSFCell cell;
      CreationHelper createHelper = workbook.getCreationHelper();
      XSSFCellStyle hlinkstyle = workbook.createCellStyle();
      XSSFFont hlinkfont = workbook.createFont();
      hlinkfont.setUnderline(XSSFFont.U_SINGLE);
      hlinkfont.setColor(HSSFColor.BLUE.index);
      hlinkstyle.setFont(hlinkfont);
      //URL Link
      cell = spreadsheet.createRow(1).createCell((short) 1);
      cell.setCellValue("URL Link");
      XSSFHyperlink link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_URL);
      link.setAddress("http://www.iowiki.com/");
      cell.setHyperlink((XSSFHyperlink) link);
      cell.setCellStyle(hlinkstyle);
      //Hyperlink to a file in the current directory
      cell = spreadsheet.createRow(2).createCell((short) 1);
      cell.setCellValue("File Link");
      link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_FILE);
      link.setAddress("cellstyle.xlsx");
      cell.setHyperlink(link);
      cell.setCellStyle(hlinkstyle);
      //e-mail link
      cell = spreadsheet.createRow(3).createCell((short) 1);
      cell.setCellValue("Email Link");
      link = (XSSFHyperlink)createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
      link.setAddress("mailto:contact@iowiki.com?" + "subject = Hyperlink");
      cell.setHyperlink(link);
      cell.setCellStyle(hlinkstyle);
      FileOutputStream out = new FileOutputStream(new File("hyperlink.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("hyperlink.xlsx written successfully");
   }
}

将上面的代码保存为HyperlinkEX.java 。 从命令提示符编译并执行它,如下所示。

$javac HyperlinkEX.java
$java HyperlinkEX

它将在当前目录中生成名为hyperlink.xlsx的Excel文件,并在命令提示符下显示以下输出。

hyperlink.xlsx written successfully

hyperlink.xlsx文件如下所示。

超链接

Apache POI – Print Area

本章介绍如何在电子表格中设置打印区域。 通常的打印区域是Excel电子表格中从左上角到右下角。 打印区域可根据您的要求定制。 这意味着您可以从整个电子表格中打印特定范围的单元格,自定义纸张大小,打开打开网格线的内容等。

以下代码用于在电子表格上设置打印区域。

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFPrintSetup;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class PrintArea {
   public static void main(String[] args)throws Exception {
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("Print Area");
      //set print area with indexes
      workbook.setPrintArea(
         0, //sheet index
         0, //start column
         5, //end column
         0, //start row
         5 //end row
      );
      //set paper size
      spreadsheet.getPrintSetup().setPaperSize(XSSFPrintSetup.A4_PAPERSIZE);
      //set display grid lines or not
      spreadsheet.setDisplayGridlines(true);
      //set print grid lines or not
      spreadsheet.setPrintGridlines(true);
      FileOutputStream out = new FileOutputStream(new File("printarea.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("printarea.xlsx written successfully"); 
   }
}

让我们将上面的代码保存为PrintArea.java 。 从命令提示符编译并执行它,如下所示。

$javac PrintArea.java
$java PrintArea

它将在当前目录中生成名为printarea.xlsx的文件,并在命令提示符下显示以下输出。

printarea.xlsx written successfully

在上面的代码中,我们没有添加任何单元格值。 因此printarea.xlsx是一个空白文件。 但是您可以在下图中看到打印预览显示带有网格线的打印区域。

printArea中

Apache POI - Database

本章介绍POI库如何与数据库交互。 在JDBC的帮助下,您可以从数据库中检索数据,并使用POI库将该数据插入电子表格中。 让我们考虑MySQL数据库进行SQL操作。

从数据库写入Excel

让我们假设从MySQL数据库test检索名为emp_tbl的以下员工数据表。

EMP ID EMP NAME DEG 薪水 DEPT
1201Gopal 技术经理 45000IT
1202ManishaProof Reader45000Testing
1203Masthanvali 技术文件撰稿人 45000IT
1204KiranHr Admin40000HR
1205Kranthi 操作管理员 30000Admin

使用以下代码从数据库中检索数据并将其插入电子表格中。

import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelDatabase {
   public static void main(String[] args) throws Exception {
      Class.forName("com.mysql.jdbc.Driver");
      Connection connect = DriverManager.getConnection( 
         "jdbc:mysql://localhost:3306/test" , 
         "root" , 
         "root"
      );
      Statement statement = connect.createStatement();
      ResultSet resultSet = statement.executeQuery("select * from emp_tbl");
      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet spreadsheet = workbook.createSheet("employe db");
      XSSFRow row = spreadsheet.createRow(1);
      XSSFCell cell;
      cell = row.createCell(1);
      cell.setCellValue("EMP ID");
      cell = row.createCell(2);
      cell.setCellValue("EMP NAME");
      cell = row.createCell(3);
      cell.setCellValue("DEG");
      cell = row.createCell(4);
      cell.setCellValue("SALARY");
      cell = row.createCell(5);
      cell.setCellValue("DEPT");
      int i = 2;
      while(resultSet.next()) {
         row = spreadsheet.createRow(i);
         cell = row.createCell(1);
         cell.setCellValue(resultSet.getInt("eid"));
         cell = row.createCell(2);
         cell.setCellValue(resultSet.getString("ename"));
         cell = row.createCell(3);
         cell.setCellValue(resultSet.getString("deg"));
         cell = row.createCell(4);
         cell.setCellValue(resultSet.getString("salary"));
         cell = row.createCell(5);
         cell.setCellValue(resultSet.getString("dept"));
         i++;
      }
      FileOutputStream out = new FileOutputStream(new File("exceldatabase.xlsx"));
      workbook.write(out);
      out.close();
      System.out.println("exceldatabase.xlsx written successfully");
   }
}

让我们将上面的代码保存为ExcelDatabase.java 。 从命令提示符编译并执行它,如下所示。

$javac ExcelDatabase.java
$java ExcelDatabase

它将在当前目录中生成名为exceldatabase.xlsx的Excel文件,并在命令提示符下显示以下输出。

exceldatabase.xlsx written successfully

exceldatabase.xlsx文件如下所示。

Excel数据库
↑回到顶部↑
WIKI教程 @2018