Excel poi API基礎教程!

原文轉子:html

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

 

 

 

 

 

POI教程

分類:

目錄(?)[+]node

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

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

POI教程

不少時候,一個軟件應用程序須要生成Microsoft Excel文件格式的報告。有時,一個應用程序甚至但願將Excel文件做爲輸入數據。例如,一個公司開發的應用程序將財務部門須要全部輸出生成本身的Excel。程序員

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

什麼是Apache POI?

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

Apache POI組件

Apache POI包含類和方法,來將MS Office全部OLE 2文檔複合。此API組件的列表以下。apache

  • 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
相關文章
相關標籤/搜索