Apache POI 之简单介绍

什么是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文件的 属性集 。

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

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

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

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

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

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

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

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

Apache POI Java Excel API

本章将向您介绍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文件

• 从工作簿和电子表格导入数据

• 获取行和列的总数

注 - 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环境

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

系统要求

JDK Java SE 2 JDK 1.5 or above

Memory 1 GB RAM (recommended)

Disk Space No minimum requirement

Operating System Version Windows XP or above, Linux

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

第1步:验证Java安装

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

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

平台 命令 示例输出

Windows Open command console and type −

\>java –version Java version "1.7.0_60"

Java (TM) SE Run Time Environment (build 1.7.0_60-b19)

Java Hotspot (TM) 64-bit Server VM (build 24.60-b09,mixed mode)

Linux Open command terminal and type −

$java –version java version "1.7.0_25"

Open JDK Runtime Environment (rhel-2.3.10.4.el6_4-x86_64)

Open JDK 64-Bit Server VM (build 23.7-b01, mixed mode)

• 我们假设本教程的读者在他们的系统上安装了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. Platform & Description

1 Windows

Set JAVA_HOME to C:\ProgramFiles\java\jdk1.7.0_60

2 Linux

Export JAVA_HOME = /usr/local/java-current

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

Sr.No. Platform & Description

1 Windows

Append the String "C:\Program Files\Java\jdk1.7.0_60\bin" to the end of the system variable PATH.

2 Linux

Export PATH = $PATH:$JAVA_HOME/bin/

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

第3步:安装Apache POI库

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

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

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

Sr.No. Platform & Description

1 Windows

Append the following strings to the end of the user variable

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-schemas-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

Export 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核心类

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

工作簿

这是创建或维护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文件。下面列出了此类下的一些方法和构造函数。

类构造函数

序号 构造函数和描述

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存储在内存中(如果已设置)。

XSSFWorkbook

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

类构造函数

序号 构造函数和描述

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对象。

类方法

序号 方法和描述

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)

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

Sheet

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

HSSFSheet

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

类构造函数

Sr.No. Constructor & Description

1 HSSFSheet(HSSFWorkbook workbook)

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

2 HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)

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

XSSFSheet

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

类构造函数

Sr.No. Constructor & Description

1 XSSFSheet()

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

2 XSSFSheet(PackagePart part, PackageRelationship rel)

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

分类方法

序号 方法和描述

1 addMergedRegion(CellRangeAddress region)

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

2 autoSizeColumn(int column)

调整列宽以适合内容。

3 iterator()

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

4 addHyperlink(XSSFHyperlink hyperlink)

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

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

XSSFRow

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

分类方法

Sr.No. Method & Description

1 createCell(int columnIndex)

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

2 setHeight(short height)

以短单位设置高度。

Cell

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

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

XSSFCell

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

字段

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

序号 Cell 类型和描述

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

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

类方法

序号 方法和描述

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)

为此单元格指定超链接。

XSSFCellStyle

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

字段总结

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

序号 字段 & 描述

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

顶部对齐垂直对齐

类构造函数

序号 构造方法 & 描述

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

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

2 XSSFCellStyle(StylesTable stylesSource)

创建一个空单元格样式

分类方法

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)

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

HSSFColor

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

嵌套类

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

序号 类名 (colors)

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

分类方法

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

Sr.No. 方法 & 描述

1 getIndex()

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

XSSFColor

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

类构造函数

Sr.No. 构造方法 & 描述

1 XSSFColor()

创建XSSFColor的新实例。.

2 XSSFColor(byte[] rgb)

使用RGB创建XSSFColor的新实例。

3 XSSFColor(java.awt.Color clr)

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

分类方法

序号 方法 & 描述

1 setAuto(boolean auto)

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

2 setIndexed(int indexed)

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

XSSFFont

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

类构造函数

序号 构造方法 & 描述

1 XSSFFont()

创建一个新的XSSFont实例。

分类方法

序号 方法 & 描述

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'属性设置布尔值。

XSSFHyperlink

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

字段

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

序号 字段 & 描述

1 LINK_DOCUMENT

用于链接任何其他文档

2 LINK_EMAIL

用于链接电子邮件

3 LINK_FILE

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

4 LINK_URL

用于链接Web URL

类方法

Sr.No. Method & Description

1 setAddress(java.lang.String address)

超链接地址。

XSSFCreationHelper

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

类方法

序号 方法 & 描述

1 createFormulaEvaluator()

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

2 createHyperlink(int type)

创建一个新的XSSFHyperlink。

XSSFPrintSetup

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

分类方法

序号 方法 & 描述

1 setLandscape(boolean ls)

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

2 setLeftToRight(boolean ltor)

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

3 setPaperSize(short size)

设置纸张尺寸。

Apache POI工作簿

这里的术语“工作簿”表示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 Name Designation

Tp01 Gopal Technical Manager

TP02 Manisha Proof Reader

Tp03 Masthan Technical Writer

Tp04 Satish Technical Writer

Tp05 Krishna Technical Writer

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

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单元格

您输入电子表格的任何数据始终存储在单元格中。我们使用行和列的标签来标识单元格。本章介绍如何使用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);

细胞类型

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

Type of cell value Type Syntax

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

String cell value 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");

   }

}

将上述代码保存在名为java 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字体

本章介绍如何在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公式

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

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

Operation Syntax

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(number, 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(number)

Absolute number = ABS(Locn) or = ABS(number)

Today date =TODAY()

Converts lowercase = LOWER(Locn) or = LOWER(text)

Square root = SQRT(locn) or = SQRT(number)

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

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超链接

本章介绍如何向单元格中的内容添加超链接。通常,超链接用于访问任何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.codingdict.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@codingdict.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");

   }

}

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

$javac HyperlinkEX.java

$java HyperlinkEX

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

hyperlink.xlsx written successfully

该 hyperlink.xlsx 文件如下所示。

Apache POI打印区域

本章介绍如何在电子表格中设置打印区域。通常的打印区域是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数据库

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

从数据库写入Excel

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

EMP ID EMP NAME DEG SALARY DEPT

1201 Gopal Technical Manager 45000 IT

1202 Manisha Proof reader 45000 Testing

1203 Masthanvali Technical Writer 45000 IT

1204 Kiran Hr Admin 40000 HR

1205 Kranthi Op Admin 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 文件如下所示。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Apache POI是一个用于创建和处理Microsoft Office格式文件的Java库。它可以帮助用户在Android应用程序中生成、读取和编辑Word文档、Excel电子表格和PowerPoint演示文稿等。使用Apache POI,我们可以通过编程方式创建和格式化Word文档,插入表格、图片和图表,设置字体样式和颜色,以及添加页眉页脚等元素。同样,我们可以读取和解析现有的Office文档,提取所需的数据,并对其进行操作和处理。 Apache POI可以在Android平台上很好地工作,因为它是一个纯Java库,并且可以与Android的Java API兼容。在使用Apache POI时,我们需要将相应的库文件添加到Android项目的依赖项中,这样就可以在代码中引用和使用POI提供的类和方法了。 使用Apache POI的好处之一是它提供了对Office文件的全面支持。我们可以根据需要创建复杂的文档、电子表格或演示文稿,以满足我们的特定需求。另外,Apache POI还具有良好的文档和社区支持,我们可以轻松地找到相关的教程、示例代码和问题解答。 然而,需要注意的是,在Android设备上使用Apache POI可能会有一些性能和内存方面的考虑。由于Office文件通常较大且相对复杂,所以在处理大型文件时,可能会导致较高的内存使用和较长的处理时间。因此,在使用Apache POI时,我们应该注意考虑性能优化和内存管理,以确保应用程序的流畅运行和高效执行。 总之,Apache POI是一个非常有用的工具,可以帮助我们在Android应用程序中处理和生成Microsoft Office格式的文件。通过使用Apache POI,我们可以轻松地创建和编辑各种Office文档,以满足我们的需求。 ### 回答2: Apache POI for Android 是一个用于在Android平台上进行Microsoft Office文档操作的开源库。它使用Java编写,可以方便地进行Excel和Word文档的读取、编辑和创建。 Apache POI for Android 提供了一组API,可以读取和写入Excel和Word文件。通过这些API,我们可以读取Excel文件中的数据、格式、计算公式等,并将其用于Android应用程序的处理。同时,我们也可以通过API将数据写入Excel文件,包括单元格数据、格式、图表等。 使用Apache POI for Android,开发者可以快速实现在Android应用程序中生成、打开和编辑Excel文件的功能。例如,一个商务应用程序可以使用这个库来生成销售报告,一个教育应用程序可以使用它来创建课程表,一个金融应用程序可以使用它来生成财务报表等。 Apache POI for Android 包含了丰富的功能,可以满足大部分的Excel和Word操作需求。它支持处理复杂的Excel文件,包括合并单元格、设置列宽、插入图像、创建公式等。此外,它还支持处理Word文件的基本操作,包括读取和写入文本、样式、段落等。 总而言之,Apache POI for Android 是一个非常实用的开源库,可以帮助开发者在Android平台上进行Excel和Word文档的操作。它提供了丰富的API,使得在Android应用程序中读取、编辑和创建Excel和Word文件变得非常简单。无论是商务应用程序、教育应用程序还是金融应用程序,都可以受益于这个功能强大的库。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾利克斯冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值