原文轉子:
http://blog.csdn.net/yellowd1/article/details/44628701

文章轉載自:易百教程 [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 庫的所有基本功能; 然而,呈現和文本提取是它的主要特點。

Apache POI環境設置
本章將指導完成Apache POI在Windows和Linux系統為基礎的設置過程。 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 –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) |
-
我們假設本教程的讀者安裝的是Java SDK版本1.7.0_60安裝在他們的系統中。
-
如果沒有Java SDK,從http://www.oracle.com/technetwork/java/javase/downloads/index.html下載其當前版本並安裝它。
第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文件的完整路徑,在上面的圖片路徑到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核心類
本章介紹了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格式。下面列出的是一些本類下的方法和構造函數。
類的構造函數
構造函數和說明 | |
---|---|
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 IdEmp 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文件的內容如下所示。

從電子表格讀取數據
讓我們考慮上述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文件如下所示。

單元格樣式
在這里,可以學習如何做單元格格式,並采用不同的風格,如合並相鄰的單元格,添加邊框,設置單元格對齊方式和填充顏色。
以下代碼是使用Java編程用於不同樣式應用到單元格。
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class CellStyle { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("cellstyle"); XSSFRow row = spreadsheet.createRow((short) 1); row.setHeight((short) 800); XSSFCell cell = (XSSFCell) row.createCell((short) 1); cell.setCellValue("test of merging"); //MEARGING CELLS //this statement for merging cells spreadsheet.addMergedRegion(new CellRangeAddress( 1, //first row (0-based) 1, //last row (0-based) 1, //first column (0-based) 4 //last column (0-based) )); //CELL Alignment row = spreadsheet.createRow(5); cell = (XSSFCell) row.createCell(0); row.setHeight((short) 800); // Top Left alignment XSSFCellStyle style1 = workbook.createCellStyle(); spreadsheet.setColumnWidth(0, 8000); style1.setAlignment(XSSFCellStyle.ALIGN_LEFT); style1.setVerticalAlignment(XSSFCellStyle.VERTICAL_TOP); cell.setCellValue("Top Left"); cell.setCellStyle(style1); row = spreadsheet.createRow(6); cell = (XSSFCell) row.createCell(1); row.setHeight((short) 800); // Center Align Cell Contents XSSFCellStyle style2 = workbook.createCellStyle(); style2.setAlignment(XSSFCellStyle.ALIGN_CENTER); style2.setVerticalAlignment( XSSFCellStyle.VERTICAL_CENTER); cell.setCellValue("Center Aligned"); cell.setCellStyle(style2); row = spreadsheet.createRow(7); cell = (XSSFCell) row.createCell(2); row.setHeight((short) 800); // Bottom Right alignment XSSFCellStyle style3 = workbook.createCellStyle(); style3.setAlignment(XSSFCellStyle.ALIGN_RIGHT); style3.setVerticalAlignment( XSSFCellStyle.VERTICAL_BOTTOM); cell.setCellValue("Bottom Right"); cell.setCellStyle(style3); row = spreadsheet.createRow(8); cell = (XSSFCell) row.createCell(3); // Justified Alignment XSSFCellStyle style4 = workbook.createCellStyle(); style4.setAlignment(XSSFCellStyle.ALIGN_JUSTIFY); style4.setVerticalAlignment( XSSFCellStyle.VERTICAL_JUSTIFY); cell.setCellValue("Contents are Justified in Alignment"); cell.setCellStyle(style4); //CELL BORDER row = spreadsheet.createRow((short) 10); row.setHeight((short) 800); cell = (XSSFCell) row.createCell((short) 1); cell.setCellValue("BORDER"); XSSFCellStyle style5 = workbook.createCellStyle(); style5.setBorderBottom(XSSFCellStyle.BORDER_THICK); style5.setBottomBorderColor( IndexedColors.BLUE.getIndex()); style5.setBorderLeft(XSSFCellStyle.BORDER_DOUBLE); style5.setLeftBorderColor( IndexedColors.GREEN.getIndex()); style5.setBorderRight(XSSFCellStyle.BORDER_HAIR); style5.setRightBorderColor( IndexedColors.RED.getIndex()); style5.setBorderTop(XSSFCellStyle.BIG_SPOTS); style5.setTopBorderColor( IndexedColors.CORAL.getIndex()); cell.setCellStyle(style5); //Fill Colors //background color row = spreadsheet.createRow((short) 10 ); cell = (XSSFCell) row.createCell((short) 1); XSSFCellStyle style6 = workbook.createCellStyle(); style6.setFillBackgroundColor( HSSFColor.LEMON_CHIFFON.index ); style6.setFillPattern(XSSFCellStyle.LESS_DOTS); style6.setAlignment(XSSFCellStyle.ALIGN_FILL); spreadsheet.setColumnWidth(1,8000); cell.setCellValue("FILL BACKGROUNG/FILL PATTERN"); cell.setCellStyle(style6); //Foreground color row = spreadsheet.createRow((short) 12); cell = (XSSFCell) row.createCell((short) 1); XSSFCellStyle style7=workbook.createCellStyle(); style7.setFillForegroundColor(HSSFColor.BLUE.index); style7.setFillPattern( XSSFCellStyle.LESS_DOTS); style7.setAlignment(XSSFCellStyle.ALIGN_FILL); cell.setCellValue("FILL FOREGROUND/FILL PATTERN"); cell.setCellStyle(style7); FileOutputStream out = new FileOutputStream( new File("cellstyle.xlsx")); workbook.write(out); out.close(); System.out.println("cellstyle.xlsx written successfully"); } }
保存上面的代碼在一個名為CellStyle.java文件,編譯並從命令提示符如下執行它。
$javac CellStyle.java $java CellStyle
它會生成一個名為cellstyle.xlsx在當前目錄中的Excel文件並顯示以下輸出。
cellstyle.xlsx written successfully
cellstyle.xlsx文件如下所示。

Apache POI字體/Fonts
本章介紹如何設置不同的字體,應用樣式,並在Excel電子表格中顯示的方向不同角度的文字。
每個系統附帶一個很大的字體如 Arial, Impact, Times New Roman,等字體集合也可以用新的字體更新,如果需要的話。同樣也有各種風格,其中的字體可以顯示,例如,粗體,斜體,下划線,刪除線等。
字體和字體樣式
下面的代碼用於特定的字體和樣式應用於一單元格的內容。
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class FontStyle { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet("Fontstyle"); XSSFRow row = spreadsheet.createRow(2); //Create a new font and alter it. XSSFFont font = workbook.createFont(); font.setFontHeightInPoints((short) 30); font.setFontName("IMPACT"); font.setItalic(true); font.setColor(HSSFColor.BRIGHT_GREEN.index); //Set font into style XSSFCellStyle style = workbook.createCellStyle(); style.setFont(font); // Create a cell with a value and set style to it. XSSFCell cell = row.createCell(1); cell.setCellValue("Font Style"); cell.setCellStyle(style); FileOutputStream out = new FileOutputStream( new File("fontstyle.xlsx")); workbook.write(out); out.close(); System.out.println( "fontstyle.xlsx written successfully"); } }
讓我們保存上面的代碼在一個名為FontStyle.java文件。從命令提示符編譯並執行它如下。
$javac FontStyle.java $java FontStyle
它生成一個名為fontstyle.xlsx在當前目錄中的Excel文件並顯示在命令提示符處鍵入以下輸出。
fontstyle.xlsx written successfully
fontstyle.xlsx文件如下所示。

文字方向
在這里,可以學習如何設置不同角度的文本方向。通常單元格的內容以水平方式顯示,由左到右,並在00角;但是可以使用下面的代碼來旋轉文本的方向(如果需要的話)。
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class TextDirection { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook.createSheet( "Text direction"); XSSFRow row = spreadsheet.createRow(2); XSSFCellStyle myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 0); XSSFCell cell = row.createCell(1); cell.setCellValue("0D angle"); cell.setCellStyle(myStyle); //30 degrees myStyle=workbook.createCellStyle(); myStyle.setRotation((short) 30); cell = row.createCell(3); cell.setCellValue("30D angle"); cell.setCellStyle(myStyle); //90 degrees myStyle=workbook.createCellStyle(); myStyle.setRotation((short) 90); cell = row.createCell(5); cell.setCellValue("90D angle"); cell.setCellStyle(myStyle); //120 degrees myStyle=workbook.createCellStyle(); myStyle.setRotation((short) 120); cell = row.createCell(7); cell.setCellValue("120D angle"); cell.setCellStyle(myStyle); //270 degrees myStyle = workbook.createCellStyle(); myStyle.setRotation((short) 270); cell = row.createCell(9); cell.setCellValue("270D angle"); cell.setCellStyle(myStyle); //360 degrees myStyle=workbook.createCellStyle(); myStyle.setRotation((short) 360); cell = row.createCell(12); cell.setCellValue("360D angle"); cell.setCellStyle(myStyle); FileOutputStream out = new FileOutputStream( new File("textdirection.xlsx")); workbook.write(out); out.close(); System.out.println( "textdirection.xlsx written successfully"); } }
保持TextDirectin.java文件上面的代碼,然后編譯並從命令提示符如下執行它。
$javac TextDirection.java $java TextDirection
這將編譯和執行,以生成一個名為textdirection.xlsx在當前目錄中的Excel文件並顯示在命令提示符處鍵入以下輸出。
textdirection.xlsx written successfully
textdirection.xlsx文件如下所示。

Apache POI公式
本章將介紹如何使用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文件如下所示。

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

Apache POI打印區域
本章介紹了如何在電子表格中設置打印區域。通常打印區域從左上角到Excel電子表格右下角。打印區域可根據要求進行定制。它意味着可以從整個電子表格打印單元的特定范圍,自定義的紙張大小,用網格線打印的內容接通等
以下代碼是用來在電子表格中設置打印區域。
import java.io.File; import java.io.FileOutputStream; import org.apache.poi.xssf.usermodel.XSSFPrintSetup; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class PrintArea { public static void main(String[] args)throws Exception { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet spreadsheet = workbook .createSheet("Print Area"); //set print area with indexes workbook.setPrintArea( 0, //sheet index 0, //start column 5, //end column 0, //start row 5 //end row ); //set paper size spreadsheet.getPrintSetup().setPaperSize( XSSFPrintSetup.A4_PAPERSIZE); //set display grid lines or not spreadsheet.setDisplayGridlines(true); //set print grid lines or not spreadsheet.setPrintGridlines(true); FileOutputStream out = new FileOutputStream( new File("printarea.xlsx")); workbook.write(out); out.close(); System.out.println("printarea.xlsx written successfully"); } }
讓我們保存了上面的代碼為PrintArea.java。編譯並從命令提示符執行它如下。
$javac PrintArea.java $java PrintArea
它會生成一個名為printarea.xlsx在當前目錄下的文件,並顯示在命令提示符處輸出以下。
printarea.xlsx written successfully
在上面的代碼中,我們還沒有添加任何單元格值。因此printarea.xlsx是一個空白文件。但是可以在下圖的打印預覽顯示網格線打印區域查看。

Apache POI數據庫
本章介紹了POI庫與數據庫的交互方式。有了JDBC幫助,可以從數據庫中檢索數據並插入數據來使用POI庫電子表格。讓我們考慮SQL操作MySQL數據庫。
寫入數據庫
讓我們假設數據表是 emp_tbl 存有雇員信息是從MySQL數據庫 test 中檢索。
EMP IDEMP 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文件如下所示。
