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