添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
逃课的针织衫  ·  音乐为伴 ...·  2 月前    · 
温文尔雅的橙子  ·  [Bug]: ...·  4 月前    · 
正直的镜子  ·  绳精病 走绳训练 ...·  10 月前    · 

Apache POI概述

许多时候,需要一个软件应用程序来生成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文件的属性集。

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

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

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

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

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

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

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

    像Apache POI一样,还有各种供应商提供的用于Excel文件生成的其他库。 这些包括Aspose的Aspose单元,Aspose的JXL和Comm Dev Library的JExcel。

    Java Excel API的风味

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

    探讨用于Java的单元格

    Aspose Cells for Java是由供应商Aspose开发和分发的纯授权Java Excel API。 该API的最新版本是8.1.2,于2014年7月发布。它是一个丰富而重的API(简单Java类和AWT类的组合),用于设计可读取,写入和操作电子表格的Excel组件。 该API的常见用途如下:

  • Excel报表,创建动态Excel报表
  • 高保真的Excel渲染和打印
  • 从Excel电子表格导入和导出数据
  • 生成,编辑和转换电子表格
  • JXL是为Selenium设计的第三方框架,支持Web浏览器上的数据驱动自动化(Web浏览器上的数据自动更新)。 然而,它也被用作JExcel API的通用支持库,因为它具有创建,读取和写入电子表格的基本功能。 基本特点如下:

  • 生成Excel文件
  • 从工作簿和电子表格导入数据
  • 获取行和列的总数
  • 注意 :JXL只支持.xls文件格式,它不能处理大数据量。

    JExcel

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

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

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

    Apache POI安装

    本章将介绍在基于Windows和Linux的系统上设置Apache POI的过程。 Apache POI可以轻松地安装并集成到您当前的Java环境中,只需几个简单的步骤,而不需要任何复杂的安装过程。 安装时需要用户管理。

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

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

    步骤1:验证您的Java安装

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

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

    Windows 打开命令控制台并键入:

    Java版本“1.7.0_60”

    Java(TM)SE运行时环境

    > java -version

    (build 1.7.0_60-b19)

    Java Hotspot(TM)64位服务器虚拟机

    (创建24.60-b09,混合模式)

    打开命令终端并键入:$ java -version java版本“1.7.0_25”打开JDK运行时环境(rhel-2.3.10.4.el6_4-x86_64)打开JDK 64位服务器虚拟机(创建23.7-b01,混合模式)
  • 我们假设本教程的读者在他们的系统上安装了Java SDK版本1.7.0_60。

  • 如果您没有Java SDK,请从 http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载其当前版本 并安装。

    步骤2:设置Java环境

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

    Windows 将JAVA_HOME设置为C: ProgramFiles java jdk1.7.0_60 Linux 导出JAVA_HOME = / usr / local / java-current

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

    Windows Linux 将字符string“C: Program Files Java jdk1.7.0_60 bin”附加到系统变量PATH的末尾。 导出PATH = $ PATH:$ JAVA_HOME / bin /

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

    步骤3:安装Apache POI库

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

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

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

    Windows

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

    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;。;”

    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

    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文件。 下面列出了这个类的一些方法和构造函数。

    类构造函数

    构造函数和描述

    HSSFWorkbook()

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

    HSSFWorkbook(DirectoryNode目录,boolean preserveNodes)

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

    HSSFWorkbook(DirectoryNode目录,POIFSFileSystem fs,boolean preserveNodes)

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

    HSSFWorkbook(java.io.InputStream s)

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

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

    在您的输入流周围创建一个POI文件系统。

    HSSFWorkbook(POIFSFileSystem fs)

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

    HSSFWorkbook(POIFSFileSystem fs,boolean preserveNodes)

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

    这些构造函数中常用的参数是:

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

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

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

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

    XSSFWorkbook

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

    类构造函数

    构造函数和描述

    XSSFWorkbook()

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

    XSSFWorkbook(java.io.File文件)

    从给定的文件构造一个XSSFWorkbook对象。

    XSSFWorkbook(java.io.InputStream是)

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

    XSSFWorkbook(java.lang.String path)

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

    方法和说明

    createSheet()

    为此工作簿创建XSSFSheet,将其添加到工作表中,并返回高级表示。

    createSheet(java.lang.String sheetname)

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

    createFont()

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

    createCellStyle()

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

    createFont()

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

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

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

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

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

    HSSFSheet

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

    类构造函数

    构造函数和描述

    HSSFSheet(HSSFWorkbook工作簿)

    创建由HSSFWorkbook调用的新HSSFSheet,从头开始创建一个表单。

    HSSFSheet(HSSFWorkbook工作簿,InternalSheet表)

    创建表示给定表单对象的HSSFSheet。

    XSSFSheet

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

    类构造函数

    构造函数和描述

    XSSFSheet()

    创建新的XSSFSheet - 由XSSFWorkbook调用从头创建一个工作表。

    XSSFSheet(PackagePart部分,PackageRelationship rel)

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

    方法与说明

    addMergedRegion(CellRangeAddress region)

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

    autoSizeColumn(int column)

    调整列宽以适应内容。

    迭代器()

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

    addHyperlink(XSSFHyperlink超链接)

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

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

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

    XSSFRow

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

    createCell(int columnIndex)

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

    setHeight(短高)

    设置短单位的高度。

    对于本课程的其余方法,请按照指定的链接 https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

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

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

    XSSFCell

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

    下面列出了XSSFCell类的一些范围及其描述。

    单元格类型 CELL_TYPE_BLANK 表示空白单元格 CELL_TYPE_BOOLEAN 表示布尔单元格(true或false) CELL_TYPE_ERROR 表示单元格上的错误值 CELL_TYPE_FORMULA 表示单元格上的公式结果 CELL_TYPE_NUMERIC 表示单元格上的数值数据 CELL_TYPE_STRING 表示单元格上的字符string(文本)

    setCellStyle(CellStyle样式)

    设置单元格的样式。

    setCellType(int cellType)

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

    setCellValue(布尔值)

    设置单元格的布尔值。

    setCellValue(java.util.Calendar value)

    设置单元格的日期值。

    setCellValue(double value)

    设置单元格的数值。

    setCellValue(java.lang.String str)

    设置单元格的字符string值。

    setHyperlink(超链接超链接)

    指定一个超级链接到这个单元格。

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

    XSSFCellStyle

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

    下表列出了从CellStyle接口继承的几个字段。

    ALIGN_CENTER 中心对齐单元格内容 ALIGN_CENTER_SELECTION 中心选择水平对齐 ALIGN_FILL 细胞符合内容大小 ALIGN_JUSTIFY 将细胞内容适合其宽度 ALIGN_LEFT 左对齐单元格内容 ALIGN_RIGHT 右对齐单元格内容 BORDER_DASH_DOT 细胞风格与破折号和点 BORDER_DOTTED 细胞样式带点缀边框 BORDER_DASHED 具有虚线边框的单元格样式 BORDER_THICK 细胞样式与粗边框 BORDER_THIN 细胞风格与细边框 VERTICAL_BOTTOM 将单元格内容垂直对齐 VERTICAL_CENTER 对齐单元格内容垂直中心 VERTICAL_JUSTIFY 垂直对齐和对齐细胞内容 VERTICAL_TOP 顶部对齐的垂直对齐

    类构造函数

    构造函数和描述

    XSSFCellStyle(int cellXfId,int cellStyleXfId,StylesTable stylesSource,ThemesTable主题)

    从提供的部分创建单元格样式

    XSSFCellStyle(StylesTable stylesSource)

    创建一个空单元格样式

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

    有关此类中剩余的方法和字段,请查看以下链接: https : //poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCellStyle.html

    HSSFColor

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

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

    只有这个类的一个方法很重要,而且用于获取索引值。

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

    XSSFColor

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

    类构造函数

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

    XSSFFont

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

    类构造函数

    有关其余方法,请浏览以下链接: https : //poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFFont.html。

    XSSFHyperlink

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

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

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

    使用XSSFCreationHelper

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

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

    XSSFPrintSetup

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

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

    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.");
             System.out.println(
             "Error to open openworkbook.xlsx file.");
    

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

    $javac OpenWorkBook.java
    $java OpenWorkBook

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

    openworkbook.xlsx file open successfully.

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

    POI - 电子表格

    本章介绍如何创建电子表格并使用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);

    写入电子表格

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

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

    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() + " 		 " );
                   break;
                   case Cell.CELL_TYPE_STRING:
                   System.out.print(
                   cell.getStringCellValue() + " 		 " );
                   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

    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);

    单元格类型指定单元格是否可以包含字符string,数值或公式。字符string单元格不能保存数值,数字单元格不能保存字符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文件如下所示。

    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文件如下所示。

    POI - 公式

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

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

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

    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文件如下所示。

    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.vue5.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:[email protected]?"
          +"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文件如下所示。

    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是一个空白文件。但是,您可以在下图中看到,打印预览显示带有网格线的打印区域。

    POI与数据库的互动

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

    写入数据库

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

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

    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文件如下所示。

    方法和说明

    setAlignment(short align)

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

    setBorderBottom(short border)

    setBorderColor(XSSFCellBorder.BorderSide side,XSSFColor color)

    设置所选边框的颜色

    setBorderLeft(Short border)

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

    setBorderRight(short border)

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

    setBorderTop(short border)

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

    setFillBackgroundColor(XSSFColor颜色)

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

    setFillForegroundColor(XSSFColor颜色)

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

    setFillPattern(short fp)

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

    setFont(Font font)

    设置此样式的字体。

    setRotation(短轮)

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

    setVerticalAlignment(short align)

    设置单元格的垂直对齐方式。

    Class名称(颜色) HSSFColor.AQUA HSSFColor.AUTOMATIC HSSFColor.BLACK HSSFColor.BLUE HSSFColor.BRIGHT_GREEN HSSFColor.BRIGHT_GRAY HSSFColor.CORAL HSSFColor.DARK_BLUE HSSFColor.DARK_GREEN HSSFColor.SKY_BLUE HSSFColor.WHITE HSSFColor.YELLOW 方法和说明

    getIndex()

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

    构造函数和描述

    XSSFColor()

    创建XSSFColor的新实例。

    XSSFColor(byte [] rgb)

    使用RGB创建XSSFColor的新实例。

    XSSFColor(java.awt.Color clr)

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

    方法和说明

    setAuto(boolean auto)

    设置一个布尔值来指示ctColor是自动的,并且系统ctColor是依赖的。

    setIndexed(int indexed)

    将索引的ctColor值设置为系统ctColor。

    构造函数和描述

    XSSFFont()

    创建一个新的XSSFont实例。

    方法和说明

    setBold(布尔粗体)

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

    setColor(短颜色)

    设置字体的索引颜色。

    setColor(XSSFColor颜色)

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

    setFontHeight(short height)

    设置字体高度(以点为单位)。

    setFontName(java.lang.String name)

    设置字体的名称。

    setItalic(布尔斜体)

    为"italic"属性设置一个布尔值。

    LINK_DOCUMENT 用于链接任何其他文档 LINK_EMAIL 用于链接电子邮件 LINK_FILE 用于链接任何格式的其他文件 LINK_URL 用于链接网址 方法和说明

    setAddress(java.lang.String address)

    超链接地址。

    方法和说明

    createFormulaEvaluator()

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

    createHyperlink(int type)

    创建一个新的XSSFHyperlink。

    方法和说明

    setLandscape(boolean ls)

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

    setLeftToRight(boolean ltor)

    设置打印时在订购时是从左到右还是从上往下。

    setPaperSize(short size)

    设置纸张尺寸。

    Emp Id Emp名称 Gopal 单元格值的类型 空白单元格值 XSSFCell.CELL_TYPE_BLANK 布尔单元格值 XSSFCell.CELL.TYPE_BOOLEAN 错误单元格值 XSSFCell.CELL_TYPE_ERROR 数值单元格值 XSSFCell.CELL_TYPE_NUMERIC 字符string单元格值 XSSFCell.CELL_TYPE_STRING 添加多个数字 = SUM(Loc1:Locn)或= SUM(n1,n2,) = COUNT(Loc1:Locn)或= COUNT(n1,n2,) 两个数字的Grav = POWER(Loc1,Loc2)或= POWER(数字,功率) 最多的多个数字 = MAX(Loc1:Locn)或= MAX(n1,n2,) = PRODUCT(Loc1:Locn)或= PRODUCT(n1,n2,) = FACT(Locn)或= FACT(number) = ABS(位置)或= ABS(数字) = TODAY() 转换为小写 = LOWER(Locn)或= LOWER(文字) = SQRT(locn)或= SQRT(number) EMP ID EMP NAME Gopal 45000 45000 Masthanvali 45000 40000 人力资源部 30000