Apache POI的基本使用詳解
基本介紹
POI
- pache POI是用Java編寫的免費(fèi)開源的跨平臺(tái)的Java API,Apache POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能,
- 使用最多的就是使用POI操作Excel文件。
- 它還能操作word等這些其他形式的文檔
jxl:專門操作Excel,專門用來操作Excel的
使用POI,需要導(dǎo)入maven坐標(biāo)
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.14</version> </dependency>
POI結(jié)構(gòu):針對(duì)不同的文檔形式來操作的時(shí)候會(huì)提供相應(yīng)的一些類
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能
HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能
HDGF - 提供讀Microsoft Visio格式檔案的功能
HPBF - 提供讀Microsoft Publisher格式檔案的功能
HSMF - 提供讀Microsoft Outlook格式檔案的功能
入門測(cè)試(從Excel文件讀取數(shù)據(jù))
使用POI可以從一個(gè)已經(jīng)存在的Excel文件中讀取數(shù)據(jù)
第一步:導(dǎo)入maven坐標(biāo)
下面是第二步
第二步:創(chuàng)建Excel文件
第三步:寫測(cè)試代碼
package com.yy.test; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Test; import java.io.File; import java.io.FileInputStream; /** * @author Marston * @date 2021/10/29 */ public class POITest { @Test public void test() throws Exception { //傳入一個(gè)輸入流,加載指定文件,創(chuàng)建一個(gè)Excel對(duì)象(工作簿) XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("E:\\testNomal\\poi.xlsx"))); //讀取Excel文件中的第一個(gè)Sheet標(biāo)簽頁 XSSFSheet sheet = excel.getSheetAt(0); //一個(gè)sheet頁里面有很多行,遍歷這個(gè)sheet標(biāo)簽頁,獲取每一行數(shù)據(jù) for (Row row : sheet) { //遍歷行,獲得每個(gè)單元格對(duì)象 for (Cell cell : row) { //cell代表單元格對(duì)象 System.out.println(cell.getStringCellValue());//getStringCellValue第二列因?yàn)槭菙?shù)值,不能轉(zhuǎn)為String類型的所以報(bào)錯(cuò) //只要將Excel表格里面的第二列的內(nèi)容改為string類型的就可以了 } } //關(guān)閉Excel文件 excel.close(); } }
運(yùn)行結(jié)果:
因?yàn)槭侨腴T案例,我這里就要類型改變?yōu)橄旅娴模瑢xcel文件里面的內(nèi)容修改后:
代碼說明及擴(kuò)展
通過上面的入門案例可以看到,POI操作Excel表格封裝了幾個(gè)核心對(duì)象:
XSSFWorkbook:工作簿
XSSFSheet:工作表
Row:行
Cell:?jiǎn)卧?/p>
上面案例是通過遍歷工作表獲得行,遍歷行獲得單元格,最終獲取單元格中的值。
還有一種方式就是獲取工作表最后一個(gè)行號(hào),從而根據(jù)行號(hào)獲得行對(duì)象,通過行獲取最后一個(gè)單元格索引,從而根據(jù)單元格索引獲取每行的一個(gè)單元格對(duì)象,代碼如下:
package com.yy.test; 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; import org.junit.Test; import java.io.File; import java.io.FileInputStream; /** * @author Marston * @date 2021/10/29 */ public class POITest { @Test public void test2() throws Exception { //傳入一個(gè)輸入流,加載指定文件,創(chuàng)建一個(gè)Excel對(duì)象(工作簿) XSSFWorkbook excel = new XSSFWorkbook(new FileInputStream(new File("E:\\testNomal\\poi.xlsx"))); //讀取Excel文件中的第一個(gè)Sheet標(biāo)簽頁 XSSFSheet sheet = excel.getSheetAt(0); //獲取當(dāng)前工作表最后一行的行號(hào),行號(hào)從0開始 int lastRowNum = sheet.getLastRowNum(); System.out.println("lastRowNum:"+lastRowNum); for(int i=0;i<=lastRowNum;i++){ //根據(jù)行號(hào)獲取每一行 XSSFRow row = sheet.getRow(i); //獲取當(dāng)前行最后一個(gè)單元格索引 short lastCellNum = row.getLastCellNum(); System.out.println("lastCellNum:"+lastCellNum); for(short j=0;j<lastCellNum;j++){ //根據(jù)單元格索引獲取單元格內(nèi)容 String value = row.getCell(j).getStringCellValue(); System.out.println(value); } } //關(guān)閉Excel文件 excel.close(); } }
入門測(cè)試(向Excel文件寫入數(shù)據(jù))
測(cè)試代碼:
//使用POI向Excel文件寫入數(shù)據(jù),并且通過輸出流將創(chuàng)建的Excel文件保存到本地磁盤 //@Test public void test3() throws Exception{ //在內(nèi)存中創(chuàng)建一個(gè)Excel文件(工作簿) XSSFWorkbook excel = new XSSFWorkbook(); //創(chuàng)建一個(gè)工作表對(duì)象,名字叫做:POI寫入測(cè)試 XSSFSheet sheet = excel.createSheet("POI寫入測(cè)試"); //在工作表中創(chuàng)建行對(duì)象,在第一行創(chuàng)建 XSSFRow title = sheet.createRow(0); //在行中創(chuàng)建單元格對(duì)象 title.createCell(0).setCellValue("姓名");//第一列內(nèi)容 title.createCell(1).setCellValue("地址"); title.createCell(2).setCellValue("年齡"); //在第二行創(chuàng)建 XSSFRow dataRow = sheet.createRow(1); dataRow.createCell(0).setCellValue("小明"); dataRow.createCell(1).setCellValue("北京"); dataRow.createCell(2).setCellValue("20"); //創(chuàng)建一個(gè)輸出流,通過輸出流將內(nèi)存中的Excel文件寫到磁盤 FileOutputStream out = new FileOutputStream(new File("e:\\hello.xlsx")); excel.write(out);//寫入 out.flush();//刷新 excel.close(); }
到此這篇關(guān)于Apache POI的基本使用的文章就介紹到這了,更多相關(guān)Apache POI使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用Apache.POI中HSSFWorkbook導(dǎo)出到Excel的實(shí)現(xiàn)方法
- Apache POI將PPT轉(zhuǎn)換成圖片實(shí)例代碼
- 基于apache poi根據(jù)模板導(dǎo)出excel的實(shí)現(xiàn)方法
- java后臺(tái)利用Apache poi 生成excel文檔提供前臺(tái)下載示例
- java Apache poi 對(duì)word doc文件進(jìn)行讀寫操作
- Java使用Apache POI庫讀取Excel表格文檔的示例
- Java中使用Apache POI讀取word文件簡(jiǎn)單示例
- Apache POI用法示例詳解
相關(guān)文章
linux時(shí)間函數(shù)與時(shí)間格式與字符串之間的轉(zhuǎn)化方法
下面小編就為大家分享一篇linux時(shí)間函數(shù)與時(shí)間格式與字符串之間的轉(zhuǎn)化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12Linux下幾種并發(fā)服務(wù)器的實(shí)現(xiàn)模式(詳解)
下面小編就為大家分享一篇Linux下幾種并發(fā)服務(wù)器的實(shí)現(xiàn)模式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)
這篇文章主要介紹了CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)的方法,需要的朋友可以參考下2013-06-06使用Apache搭建http服務(wù)器實(shí)現(xiàn)CGI功能
專門處理 HTTP 請(qǐng)求的服務(wù)器,也被稱為 Web 服務(wù)器, 常用的 Web 服務(wù)器有 Apache和 Nginx ,當(dāng)然幾大巨頭五聯(lián)網(wǎng)公司也都有其獨(dú)自研發(fā)的 Web 服務(wù)器,比如阿里巴巴的Tengine, 這篇文章主要介紹了使用Apache搭建http服務(wù)器,實(shí)現(xiàn)CGI,需要的朋友可以參考下2024-07-07詳解CentOS 7.0源碼包搭建LNMP 實(shí)際環(huán)境搭建
本篇文章主要介紹了Centos7+Nginx1.11.7+MySQL5.7.16+PHP7.1.0+openssl-1.1.0c,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12Centos7下編譯安裝配置Nginx+PHP+MySql環(huán)境
這篇文章主要介紹了Centos7下編譯安裝配置Nginx+PHP+MySql環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02通過 SSH 在遠(yuǎn)程 Linux 系統(tǒng)上運(yùn)行命令的方法
這篇文章主要介紹了通過 SSH 在遠(yuǎn)程 Linux 系統(tǒng)上運(yùn)行命令的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10詳解Linux如何將一個(gè)文件夾的所有內(nèi)容授權(quán)給某一個(gè)用戶?
這篇文章主要介紹了Linux如何將一個(gè)文件夾的所有內(nèi)容授權(quán)給某一個(gè)用戶,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05