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,xlsx,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,混合模式) |
我们假设本教程的读者在他们的系统上安装了Java SDK版本1.7.0_60。
如果您没有Java SDK,请从https://www.oracle.com/technetwork/java/javase/downloads/index.html下载其当前版本并安装它。
第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名称(颜色) |
---|---|
1 | HSSFColor.AQUA |
2 | HSSFColor.AUTOMATIC |
3 | HSSFColor.BLACK |
4 | HSSFColor.BLUE |
5 | HSSFColor.BRIGHT_GREEN |
6 | HSSFColor.BRIGHT_GRAY |
7 | HSSFColor.CORAL |
8 | HSSFColor.DARK_BLUE |
9 | HSSFColor.DARK_GREEN |
10 | HSSFColor.SKY_BLUE |
11 | HSSFColor.WHITE |
12 | HSSFColor.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名称 | 指定 |
---|---|---|
Tp01 | Gopal | 技术经理 |
TP02 | Manisha | Proof Reader |
Tp03 | Masthan | 技术文件撰稿人 |
Tp04 | Satish | 技术文件撰稿人 |
Tp05 | Krishna | 技术文件撰稿人 |
以下代码用于将上述数据写入电子表格。
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.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 value | XSSFCell.CELL_TYPE_BLANK |
Boolean cell value | XSSFCell.CELL.TYPE_BOOLEAN |
Error cell value | XSSFCell.CELL_TYPE_ERROR |
Numeric cell value | XSSFCell.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文件如下所示。
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文件如下所示。
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是一个空白文件。 但是您可以在下图中看到打印预览显示带有网格线的打印区域。
Apache POI - Database
本章介绍POI库如何与数据库交互。 在JDBC的帮助下,您可以从数据库中检索数据,并使用POI库将该数据插入电子表格中。 让我们考虑MySQL数据库进行SQL操作。
从数据库写入Excel
让我们假设从MySQL数据库test检索名为emp_tbl的以下员工数据表。
EMP ID | EMP NAME | DEG | 薪水 | DEPT |
---|---|---|---|---|
1201 | Gopal | 技术经理 | 45000 | IT |
1202 | Manisha | Proof Reader | 45000 | Testing |
1203 | Masthanvali | 技术文件撰稿人 | 45000 | IT |
1204 | Kiran | Hr Admin | 40000 | HR |
1205 | Kranthi | 操作管理员 | 30000 | Admin |
使用以下代码从数据库中检索数据并将其插入电子表格中。
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文件如下所示。