POI操作excel03和excel07以上版本

来源:http://www.cnblogs.com/GeekRegister/archive/2016/04/23/5425076.html
-Advertisement-
Play Games

JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel,個人認為已經是被淘汰的框架,而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls 和 .xlsx兩種格式的excel。 P ...


JAVA中操作Excel的有兩種比較主流的工具包: JXL 和 POI 。jxl 只能操作Excel 95, 97, 2000也即以.xls為尾碼的excel,個人認為已經是被淘汰的框架,而poi可以操作Excel 95及以後的版本,即可操作尾碼為 .xls 和 .xlsx兩種格式的excel。

POI全稱 Poor Obfuscation Implementation,直譯為“可憐的模糊實現”,當然並不可憐而且很實用,利用POI介面可以通過JAVA操作Microsoft office 套件工具的讀寫功能。官網:http://poi.apache.org ,POI支持office的所有版本,並且在接下來的演示中需要從前端頁面導入用戶上傳的版本不確定的excel文件,所以選擇POI來講解。在官網,下載POI :對於只操作2003 及以前版本的excel,只需要 ,如果需要同時對2007及以後版本進行操作則需要複製

引入以下jar包:

poi-3.10.1-20140818.jar(若需求為03版本的,以下兩個jar包不需要引入)

poi-ooxml-3.10.1-20140818.jar,

poi-ooxml-schemas-3.10.1-20140818.jar,以及複製在ooxml-lib目錄下的xmlbeans-2.6.0.jar,dom4j-1.6.1.jar。

在POI包中有如下幾個主要對象和excel的幾個對象對應:

HSSFWorkbook

Excel 工作簿workbook

HSSFSheet

Excel 工作表 sheet

HSSFRow

Excel 行

HSSFCell

Excel 單元格

                       (07以上版本與之不同是使用的XSSFWorkbook,XSSFSheet,XSSFRow,XSSFCell)

附代碼

  1 package cn.test;
  2 
  3 import java.io.FileInputStream;
  4 import java.io.FileOutputStream;
  5 
  6 import org.apache.poi.hssf.usermodel.HSSFCell;
  7 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  8 import org.apache.poi.hssf.usermodel.HSSFFont;
  9 import org.apache.poi.hssf.usermodel.HSSFRow;
 10 import org.apache.poi.hssf.usermodel.HSSFSheet;
 11 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 12 import org.apache.poi.hssf.util.CellRangeAddress;
 13 import org.apache.poi.hssf.util.HSSFColor;
 14 import org.apache.poi.ss.usermodel.Cell;
 15 import org.apache.poi.ss.usermodel.Row;
 16 import org.apache.poi.ss.usermodel.Sheet;
 17 import org.apache.poi.ss.usermodel.Workbook;
 18 import org.apache.poi.xssf.usermodel.XSSFCell;
 19 import org.apache.poi.xssf.usermodel.XSSFRow;
 20 import org.apache.poi.xssf.usermodel.XSSFSheet;
 21 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 22 import org.junit.Test;
 23 
 24 public class TestPOI2Excel {
 25     /**
 26      * 寫入03版本excel
 27      * @throws Exception
 28      */
 29     @Test
 30     public void testWrite03Excel() throws Exception {
 31         /**
 32          * 工作簿-工作表-行-單元格
 33          * 
 34          */
 35         //工作簿
 36         HSSFWorkbook workbook = new HSSFWorkbook();
 37         //工作表
 38         HSSFSheet sheet = workbook.createSheet("hello world");
 39         //行--index從0開始
 40         HSSFRow row = sheet.createRow(2);
 41         //創建單元格--index從0開始
 42         HSSFCell cell = row.createCell(2);
 43         cell.setCellValue("hello world");
 44         //輸出到硬碟
 45         FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\測試.xls");
 46         //吧excel輸入到具體的地址
 47         workbook.write(fileOutputStream);
 48         
 49         //關閉
 50         workbook.close();
 51         fileOutputStream.close();
 52         
 53     }
 54     
 55     /**
 56      * 讀取03版本excel
 57      * @throws Exception
 58      */
 59     @Test
 60     public void testRead03Excel() throws Exception {
 61         /**
 62          * 工作簿-工作表-行-單元格
 63          * 
 64          */
 65         FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\測試.xls");
 66         //讀取工作簿
 67         HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
 68         //讀取第一個工作表
 69         HSSFSheet sheet = workbook.getSheetAt(0);
 70         //讀取第三行--index從0開始
 71         HSSFRow row = sheet.getRow(2);
 72         //讀取單元格--index從0開始
 73         HSSFCell cell = row.getCell(2);
 74         System.out.println(cell.getStringCellValue());
 75         
 76         //關閉
 77         workbook.close();
 78         fileInputStream.close();
 79         
 80     }
 81     
 82     /**
 83      * 寫入07版本excel
 84      * @throws Exception
 85      */
 86     @Test
 87     public void testWrite07Excel() throws Exception {
 88         /**
 89          * 工作簿-工作表-行-單元格
 90          * 
 91          */
 92         //工作簿
 93         XSSFWorkbook workbook = new XSSFWorkbook();
 94         //工作表
 95         XSSFSheet sheet = workbook.createSheet("hello world");
 96         //行--index從0開始
 97         XSSFRow row = sheet.createRow(2);
 98         //創建單元格--index從0開始
 99         XSSFCell cell = row.createCell(2);
100         cell.setCellValue("hello world");
101         //輸出到硬碟
102         FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx");
103         //吧excel輸入到具體的地址
104         workbook.write(fileOutputStream);
105         
106         //關閉
107         workbook.close();
108         fileOutputStream.close();
109         
110     }
111     
112     /**
113      * 讀取07版本excel
114      * @throws Exception
115      */
116     @Test
117     public void testRead07Excel() throws Exception {
118         /**
119          * 工作簿-工作表-行-單元格
120          * 
121          */
122         FileInputStream fileInputStream = new FileInputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xlsx");
123         //讀取工作簿
124         XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
125         //讀取第一個工作表
126         XSSFSheet sheet = workbook.getSheetAt(0);
127         //讀取第三行--index從0開始
128         XSSFRow row = sheet.getRow(2);
129         //讀取單元格--index從0開始
130         XSSFCell cell = row.getCell(2);
131         System.out.println(cell.getStringCellValue());
132         
133         //關閉
134         workbook.close();
135         fileInputStream.close();
136         
137     }
138     
139     /**
140      * 讀取07版本excel
141      * @throws Exception
142      */
143     @Test
144     public void testRead03And07Excel() throws Exception {
145         /**
146          * 工作簿-工作表-行-單元格
147          * 
148          */
149         String fileName = "D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test.xls";
150         if(fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")){//判斷是否是excel
151             boolean is03Excel = fileName.matches("^.+\\.(?i)(xls)$");
152             FileInputStream fileInputStream = new FileInputStream(fileName);
153             
154             //讀取工作簿
155             Workbook workbook = is03Excel?new HSSFWorkbook(fileInputStream):new XSSFWorkbook(fileInputStream);
156             //讀取第一個工作表
157             Sheet sheet = workbook.getSheetAt(0);
158             //讀取第三行--index從0開始
159             Row row = sheet.getRow(2);
160             //讀取單元格--index從0開始
161             Cell cell = row.getCell(2);
162             System.out.println(cell.getStringCellValue());
163             
164             //關閉
165             workbook.close();
166             fileInputStream.close();
167         }
168     }
169     
170     /**
171      * 創建合併單元格
172      * @throws Exception
173      */
174     @Test
175     public void testExcelStyle() throws Exception {
176         /**
177          * 工作簿-工作表-行-單元格
178          * 
179          */
180         //工作簿
181         HSSFWorkbook workbook = new HSSFWorkbook();
182         
183         //1.1創建合併單元格對象合併第三行第三列到第五列
184         CellRangeAddress cellRangeAddress = new CellRangeAddress(2,2,2,4);//firstRow, lastRow, firstCol, lastCol
185         //1.2創建單元格樣式        
186         HSSFCellStyle style = workbook.createCellStyle();
187         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
188         style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
189         //1.3設置字體
190         HSSFFont font = workbook.createFont();
191         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
192         font.setFontHeightInPoints((short)16);
193         //載入字體
194         style.setFont(font);
195         //單元格背景
196         //style.setFillPattern(HSSFCellStyle.DIAMONDS);//填充模式
197         //style.setFillBackgroundColor(HSSFColor.YELLOW.index);//背景色
198         
199         //2、工作表
200         HSSFSheet sheet = workbook.createSheet("hello world");
201         
202         //2.1載入合併單單元格對象
203         sheet.addMergedRegion(cellRangeAddress);
204         
205         
206         //3.行--index從0開始
207         HSSFRow row = sheet.createRow(2);
208         //4.創建單元格--index從0開始
209         HSSFCell cell = row.createCell(2);
210         cell.setCellStyle(style);
211         cell.setCellValue("hello world");
212         //輸出到硬碟
213         FileOutputStream fileOutputStream = new FileOutputStream("D:\\Workspaces\\MyEclipse 2015\\itcastTax\\WebRoot\\upload\\test2.xls");
214         //吧excel輸入到具體的地址
215         workbook.write(fileOutputStream);
216         
217         //關閉
218         workbook.close();
219         fileOutputStream.close();
220         
221     }
222 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Tomcat 是一個免費的開放源代碼的 Servlet 容器,它是 Apache 軟體基金會的一個頂級項目,由 Apache,Sun和其他一些公司及個人共同開發而成。由於有了 Sun 的參與與支持,最新的 Servlet 和 JSP 規範總是能在 Tomcat 中的到體現。 官方網站:http:// ...
  • Java的包名都有小寫單片語成,類名首字母大寫;包的路徑符合所開發的 系統模塊的 定義,比如生產對生產,物資對物資,基礎類對基礎類。以便看了包名就明白是哪個模塊,從而直接到對應包里找相應的實現。 由於Java面向對象的特性,每名Java開發人員都可以編寫屬於自己的Java Package,為了保障每 ...
  • ...
  • Java this的一兩點使用 之前的文章都是關於Android的使用,這次想寫一些關於Java的知識,總結一下Java的使用。這次寫的是關於Java this的使用,介紹以下內容: 1. this的概念 2. this的各種應用 3. 總結 this 是什麼 在寫一個方法的時候,如果想在方法內部獲 ...
  • 【首先聲明:LCT≠動態樹,前者是一種數據結構,而後者是一類問題,即:LCT—解決—>動態樹】 Link-cut-tree(下文統稱LCT)是一種強大的數據結構,不僅可以像樹鏈剖分一樣對樹上的兩點進行詢問(權值和、權值的最值……),還可以維護森林的連通性。 學習LCT首推楊哲神犇的《QTREE解法的 ...
  • 作者:白狼 出處:http://www.manks.top/article/yii2_gridview_dropdown_search本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 下拉搜索,我們先來看看預期的效果圖 具體怎麼 ...
  • 作者:白狼 出處:http://www.manks.top/article/yii2_gridview_dateformat_search 本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 日期格式化,我們先來看看效果圖 這個我 ...
  • wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b搭建php環境 在win下,下載wampserver2.5-Apache-2.4.9-Mysql-5.6.17-php5.5.12-32b.exe,預設安裝。 然後打開安裝目錄下apache的h ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...