Excel poi API基礎教程!


原文轉子:

http://blog.csdn.net/yellowd1/article/details/44628701

 

 

 

 

 

POI教程

分類:

目錄(?)[+]

文章轉載自:易百教程 [http:/www.yiibai.com]

本文地址:http://www.yiibai.com/apache_poi/apache_poi_java_excel.html

POI教程

很多時候,一個軟件應用程序需要生成Microsoft Excel文件格式的報告。有時,一個應用程序甚至希望將Excel文件作為輸入數據。例如,一個公司開發的應用程序將財務部門需要所有輸出生成自己的Excel。

任何Java程序員願意將MS Office文件的輸出,可以使用預定義和只讀API來做到。

什么是Apache POI?

Apache POI是一種流行的API,它允許程序員使用Java程序創建,修改和顯示MS Office文件。這由Apache軟件基金會開發使用Java分布式設計或修改Microsoft Office文件的開源庫。它包含類和方法對用戶輸入數據或文件到MS Office文檔進行解碼。

Apache POI組件

Apache POI包含類和方法,來將MS Office所有OLE 2文檔復合。此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 (可怕的圖表格式) : 它包含類和方法為MS-Visio的二進制文件。

  • HPBF (可怕的出版商格式) : 它被用來讀取和寫入MS-Publisher文件。

本教程將指導使用Java Excel文件完成工作過程。因此,本教程僅限於HSSF和XSSF組件。

注:舊版本的POI支持二進制文件格式,如DOC,XLS,PPT等從版本3.5起,POI支持微軟Office的OOXML文件格式,如DOCX,XLSX,PPTX等。

如Apache POI,還有由不同的供應商為Excel文件的生成提供的其他庫。這些措施包括Aspose面向Java的Aspose,JXL 通過共享庫由JExcel團隊開發。


本章將介紹一些Java ExcelAPI和它們的特征。有許多廠商誰提供Java Excel相關的API;其中一些將在這一章中討論。

Java Aspose Cells

Java Aspose Cells 是一種純粹的Java授權的Excel API,開發和供應商Aspose發布。這個API的最新版本是8.1.2,發布於2014年7月,是一個豐富而厚重的API(普通Java類和AWT類 的組合)設計,可以讀、寫和操縱電子表格Excel的組件。此API常見用途如下:

  • Excel報表,建立動態Excel報表
  • 高保真的Excel渲染和打印
  • 從Excel電子表格中導入和導出數據
  • 生成,編輯,轉換和電子表格

JXL

JXL是一款專為Selenium第三方框架,支持基於Web瀏覽器(數據是Web瀏覽器自動更新)數據驅動的自動化。然而,它也被用來作為JExcel API的一個共同的支持庫,因為它的基本功能是可創建,讀取和寫入電子表格。基本特征如下:

  • 生成Excel文件
  • 從工作簿和電子表格導入數據
  • 獲得行和列的總數

注意:JXL只支持xls檔案格式,並且不能處理大數據量。

JExcel

JExcel是由Team Dev開發提供純行貨API。利用這一點程序員可以很容易地讀取,寫入,顯示和修改Excel工作簿中的兩種格式:.xls和.XLSX。這個API可以 很容易地嵌入Java的Swing和AWT。這個API的最新版本是Jexcel-2.6.12,發布於2009年,主要特點如下。

  • 自動化Excel應用程序,工作簿,工作表等
  • 在Java Swing應用程序作為普通的Swing組件嵌入到工作簿
  • 事件偵聽器添加到工作簿和電子表格
  • 添加事件處理程序來處理的工作簿和電子表格事件的行為
  • 添加本地對等開發定制功能

Apache POI

Apache POI是Apache軟件基金會提供的100%開源庫。大多數中小規模的應用程序開發主要依賴於Apache POI(HSSF+ XSSF)。它支持Excel 庫的所有基本功能; 然而,呈現和文本提取是它的主要特點。

Circle
 

Apache POI環境設置

本章將指導完成Apache POI在Windows和Linux系統為基礎的設置過程。 Apache POI可以輕松地安裝和集成,下面沒有任何復雜的設置過程,通過幾個簡單步驟,目前Java環境,用戶管理是必需安裝的。

系統要求

 
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 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 打開命令終端,輸入: $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)

第2步:設置Java環境

設置環境變量JAVA_HOME指向安裝了機器上Java的基本目錄位置。例如,

平台
描述
Windows Set JAVA_HOME to C:\ProgramFiles\java\jdk1.7.0_60
Linux Export JAVA_HOME=/usr/local/java-current

添加Java編譯器位置的完整路徑到系統路徑。

平台
描述
Windows Linux
添加字符串 "C:\Program Files\Java\jdk1.7.0_60\bin" 到系統環境變量PATH 的尾部。 Export PATH=$PATH:$JAVA_HOME/bin/

從命令提示符下執行命令java-version如上所述。

第3步:安裝Apache POI庫

從 http://poi.apache.org/download.htmll 下載Apache POI的最新版本,並解壓縮所需要的庫,可以鏈接到Java程序的文件夾。我們假設該文件在C盤的文件夾中。

下面的圖像顯示所下載的文件夾內的目錄和文件結構。

Jar Jar

添加的五個jar文件的完整路徑,在上面的圖片路徑到CLASSPATH。

平台
描述
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-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

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

 
到這里,整個POI環境設置已經完成,下一節我們來學習如何使用。


POI核心類

本章介紹了Apache POI的API,它是至關重要的工作,使用Java程序操作Excel文件有下面幾個類和方法。

工作簿

這是創建或維護Excel工作簿的所有類的超接口。它屬於org.apache.poi.ss.usermodel包。是實現此接口的兩個類,如下所示:

  • HSSFWorkbook : 這個類有讀取和.xls 格式和寫入Microsoft Excel文件的方法。它與微軟Office97-2003版本兼容。

  • XSSFWorkbook : 這個類有讀寫Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。它與MS-Office版本2007或更高版本兼容。

HSSFWorkbook

它是在org.apache.poi.hssf.usermodel包的高層次的類。它實現了Workbook 接口,用於Excel文件中的.xls格式。下面列出的是一些本類下的方法和構造函數。

類的構造函數

 
S.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(如果設置)。

注意: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接口。下面列出的是這個類的方法和構造函數。

類的構造函數

S.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對象。

類方法

S.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文檔:http://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電子表格,它允許在sheet 方式和表數據格式。

類的構造函數

S.No.
構造函數及描述
1

HSSFSheet(HSSFWorkbook workbook)

創建新HSSFSheet通過調用HSSFWorkbook從頭開始創建一個表。

2

HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)

創建HSSFSheet表示給定表對象。

XSSFSheet

這是代表了Excel電子表格的高級別代表的一類。這在org.apache.poi.hssf.usermodel包下。

類的構造函數

S.No.
構造函數及描述
1

XSSFSheet()

創造了新的XSSFSheet- 調用XSSFWorkbook從頭開始創建一個表。

2

XSSFSheet(PackagePart part, PackageRelationship rel)

創建XSSFSheet表示給定包的一部分和關系。

類方法

S.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.

這是在org.apache.poi.ss.usermodel包的接口。它是用於一排的電子表格的高層表示。它是代表了POI庫的行所有類的超接口。

XSSFRow

這是在org.apache.poi.xssf.usermodel包的類。它實現了Row接口,因此它可以在電子表格中創建行。下面列出的是這個類在方法和構造函數。

類方法

S.No.
描述
1

createCell(int columnIndex)

創建新單元行並返回。

2

setHeight(short height)

設置短單位的高度。

對於此類的其余的方法,參考如下鏈接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

單元格

這是在org.apache.poi.ss.usermodel包的接口。它是代表了單元在電子表格中的行中的所有類的超接口。

單元格可以使用各種屬性,例如空白,數字,日期,錯誤等單元格被添加到一個行之前應具有(基於0)自己的編號。

XSSFCell

這是在 org.apache.poi.xssf.usermodel 包的類。它實現了單元格界面。它是單元在電子表格中的行的一個高層次的表示。

字段摘要

下面列出的是一些XSSFCell類的字段以及它們的描述。

單元格類型
描述
CELL_TYPE_BLANK 代表空白單元格
CELL_TYPE_BOOLEAN 代表布爾單元(true或false)
CELL_TYPE_ERROR 表示在單元的誤差值
CELL_TYPE_FORMULA 表示一個單元格公式的結果
CELL_TYPE_NUMERIC 表示對一個單元的數字數據
CELL_TYPE_STRING 表示對一個單元串(文本)

類方法

S.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

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 頂部對齊為垂直對齊

類的構造函數

S.No.
構造函數及描述
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)

設置單元類型為

S.No. 類名(顏色)
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

類方法

這個類的只有一個方法是很重要的,並且用於獲取索引值。

S.No.
方法和描述
1

getIndex()

這種方法被用來獲得一個嵌套類的索引值

對於其余的方法和嵌套類,請參閱以下鏈接:
https://poi.apache.org/apidocs/org/apache/poi/hssf/util/HSSFColor.html.

XSSFColor

這是在org.apache.poi.xssf.usermodel包的類。它是用來表示在電子表格中的顏色。它實現了顏色的接口。下面列出的是它的一些方法和構造函數。

類的構造函數

S.No.
Constructor and 描述
1

XSSFColor()

創建XSSFColor的新實例。

2

XSSFColor(byte[] rgb)

創建XSSFColor使用RGB的新實例。

3

XSSFColor(java.awt.Color clr)

創建XSSFColor使用Color類從AWT包的新實例。

類方法

S.No.
方法和描述
1

setAuto(boolean auto)

設置一個布爾值,表示ctColor是自動的,系統ctColor依賴。

2

setIndexed(int indexed)

設置索引ctColor值系統ctColor。

對於其余的方法,請訪問以下鏈接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFColor.html.

XSSFFont

這是在org.apache.poi.xssf.usermodel包的類。它實現了Font接口,因此它可以處理工作簿中不同的字體。

類的構造函數

S.No.
構造函數和描述
1

XSSFFont()

創建一個新的XSSFont實例。

類方法

S.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.

XSSFHyperlink

這是在org.apache.poi.xssf.usermodel包的類。它實現了Hyperlink接口。它是用來連結設置為電子表格的單元格內容。

字段

屬於此類的字段如下。這里,字段意味着使用超鏈接的類型。

字段
描述
LINK_DOCUMENT 用於連接任何其他文件
LINK_EMAIL 用於鏈接的電子郵件
LINK_FILE 用於以任何格式鏈接任何其他文件
LINK_URL 用來連接一個網頁URL

類方法

S.No.
方法及描述
1

setAddress(java.lang.String address)

超鏈接地址。

對於其余的方法,請訪問以下鏈接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFHyperlink.html

XSSFCreationHelper

這是在org.apache.poi.xssf.usermodel包的類。它實現了CreationHelper接口。它被用作公式求值和設置超文本鏈接支持類。

類方法

S.No.
方法和描述
1

createFormulaEvaluator()

創建一個XSSFFormulaEvaluator例如,結果計算公式的單元格的對象。

2

createHyperlink(int type)

Creates a new XSSFHyperlink.

對於其余的方法,請參考以下鏈接:https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFCreationHelper.html.

XSSFPrintSetup

這是在org.apache.poi.xsssf.usermodel包下的類。它實現了PrintSetup接口。它是用來設置打印頁面大小,面積,選項和設置。

類方法

S.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

Apache POI工作簿

此處的術語“Workbook”指的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電子表格/Spreadsheet

本章將介紹如何創建一個電子表格,並使用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 稱號
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

這將編譯和執行來生成一個Excel文件名為Writesheet.xlsx在當前目錄中,在命令提示符處鍵入以下輸出。

Writesheet.xlsx written successfully

Writesheet.xlsx文件的內容如下所示。

Writesheet

從電子表格讀取數據

讓我們考慮上述excel文件命名Writesheet.xslx作為輸入文件。注意下面的代碼;它是用於從電子表格中讀取數據。

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

保存上面的代碼到一個名為TypesofCells.java文件,編譯並從命令提示符如下執行它。

$javac TypesofCells.java $java TypesofCells

如果您的系統配置了POI庫,那么它會編譯和執行在當前目錄中生成一個名為typesofcells.xlsx的Excel文件,並顯示以下輸出。

typesofcells.xlsx written successfully

typesofcells.xlsx文件如下所示。

Type Of Cells

單元格樣式

在這里,可以學習如何做單元格格式,並采用不同的風格,如合並相鄰的單元格,添加邊框,設置單元格對齊方式和填充顏色。

以下代碼是使用Java編程用於不同樣式應用到單元格。

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

保存上面的代碼在一個名為CellStyle.java文件,編譯並從命令提示符如下執行它。

 
$javac CellStyle.java $java CellStyle

它會生成一個名為cellstyle.xlsx在當前目錄中的Excel文件並顯示以下輸出。

cellstyle.xlsx written successfully

cellstyle.xlsx文件如下所示。

CellStyle
 

Apache POI字體/Fonts

本章介紹如何設置不同的字體,應用樣式,並在Excel電子表格中顯示的方向不同角度的文字。

每個系統附帶一個很大的字體如 Arial, Impact, Times New Roman,等字體集合也可以用新的字體更新,如果需要的話。同樣也有各種風格,其中的字體可以顯示,例如,粗體,斜體,下划線,刪除線等。

字體和字體樣式

下面的代碼用於特定的字體和樣式應用於一單元格的內容。

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

讓我們保存上面的代碼在一個名為FontStyle.java文件。從命令提示符編譯並執行它如下。

$javac FontStyle.java
$java FontStyle

它生成一個名為fontstyle.xlsx在當前目錄中的Excel文件並顯示在命令提示符處鍵入以下輸出。

fontstyle.xlsx written successfully

fontstyle.xlsx文件如下所示。

FontStyle

文字方向

在這里,可以學習如何設置不同角度的文本方向。通常單元格的內容以水平方式顯示,由左到右,並在00角;但是可以使用下面的代碼來旋轉文本的方向(如果需要的話)。

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

保持TextDirectin.java文件上面的代碼,然后編譯並從命令提示符如下執行它。

 
$javac TextDirection.java
$java TextDirection

這將編譯和執行,以生成一個名為textdirection.xlsx在當前目錄中的Excel文件並顯示在命令提示符處鍵入以下輸出。

textdirection.xlsx written successfully

textdirection.xlsx文件如下所示。

TextDirectin
 

Apache POI公式

本章將介紹如何使用Java編程應用不同單元公式的過程。 Excel應用程序的基本目的是通過應用公式就可以保持數值數據。

在公式中,我們通過動態值,或在Excel工作表中的值的位置。在執行這個公式,就會得到想要的結果。下表列出了常用的在Excel中的幾個基本公式。

操作
語法
添加多個數值 = SUM(Loc1:Locn) or = SUM(n1,n2,)
計數 = COUNT(Loc1:Locn) or = COUNT(n1,n2,)
兩個數的冪 = POWER(Loc1,Loc2) or = POWER(number, power)
多個數的最大值 = MAX(Loc1:Locn) or = MAX(n1,n2,)
乘積 = PRODUCT(Loc1:Locn) or = PRODUCT(n1,n2,)
階乘 = FACT(Locn) or = FACT(number)
絕對數字 = ABS(Locn) or = ABS(number)
今天的日期 =TODAY()
轉換成小寫 = LOWER(Locn) or = LOWER(text)
平方根 = 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文件如下所示。

Formula
 

Apache POI超鏈接

本章介紹了如何為超鏈接添加到內容的單元格。超鏈接通常被用來訪問任何網站的網址,電子郵件或外部文件。

下面的代碼演示如何創建單元格的超鏈接。

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

Hyperlink
 

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是一個空白文件。但是可以在下圖的打印預覽顯示網格線打印區域查看。

PrintArea
 

Apache POI數據庫

本章介紹了POI庫與數據庫的交互方式。有了JDBC幫助,可以從數據庫中檢索數據並插入數據來使用POI庫電子表格。讓我們考慮SQL操作MySQL數據庫。

寫入數據庫

讓我們假設數據表是 emp_tbl 存有雇員信息是從MySQL數據庫 test 中檢索。

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

使用下面的代碼從數據庫中檢索數據,並插入到同一個電子表格。

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

讓我們保存了上面的代碼為ExcelDatabase.java。編譯並從命令提示符執行它如下。

 
$javac ExcelDatabase.java $java ExcelDatabase

它會生成一個名為exceldatabase.xlsx在當前目錄中的Excel文件並顯示在命令提示符處輸出以下。

exceldatabase.xlsx written successfully

exceldatabase.xlsx文件如下所示。

Excel Database
 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM