POI讀寫EXCEL文件
標簽: POI POI操作EXCEL表格 POI讀EXCEL表格 POI寫入數據到EXCEL POI表格讀寫
一、Apache POI簡介
Apache POI是Apache軟件基金會的開放源碼函式庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。
基本功能
結構:
HSSF - 提供讀寫Microsoft Excel格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML格式檔案的功能。
HWPF - 提供讀寫Microsoft Word格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀寫Microsoft Visio格式檔案的功能。
二、創建工程所需jar包
commons-io-2.4.jar
poi-3.15.jar
三、環境準備
1.User.java
package com.hello.world.pojo;
public class User {
private int id;
private String name;
private String sex;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
}
2、Excel文件原始數據
3、讀取Excel文件內容
Excel文件保存路徑:D:\excel
文件名:poi_test.xls
4、PoiReader.java
package com.hello.world.poi;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.hello.world.pojo.User;
/**
*POI讀取Excel文件
*/
public class PoiReader {
public static void main(String[] args) {
// 將讀取出來的數據封裝到User對象,將User對象添加到集合中
List<User> list = new ArrayList<>();
try {
File file = new File("D:\\excel\\poi_test.xls");
FileInputStream input = new FileInputStream(file);
// HSSFWorkbook用于操作后綴為.xls的excel表格,XSSFWorkbook用于操作.xlsx的excel表格
HSSFWorkbook workbook = new HSSFWorkbook(input);
// 獲取工作簿的方法有兩種,一種是根據索引獲取,第一個sheet的索引為0,還有一種是根據sheet名稱獲取
// HSSFSheet sheet = workbook.getSheet("poi");
HSSFSheet sheet = workbook.getSheetAt(0);
// 獲得最后一行的行號
// 最后一行行號等于sheet的數據行數
int lastNum = sheet.getLastRowNum();
// 遍歷獲得每一行,第一行是表頭,從第二行開始
for (int i = 1; i < lastNum + 1; i++) {
User u = new User();
// 得到每一行
HSSFRow row = sheet.getRow(i);
// 獲得最后一列的值,等于每一行的總列數
int lastCellNum = row.getLastCellNum();
// 遍歷每一列,得到每一個單元格
for (int j = 0; j < lastCellNum; j++) {
if (j == 0) {
// 第i行第j列單元格,第一列為數字格式
HSSFCell cell = row.getCell(j);
int id = (int) cell.getNumericCellValue();
u.setId(id);
}
if (j == 1) {
HSSFCell cell = row.getCell(j);
String name = cell.getStringCellValue();
u.setName(name);
}
if (j == 2) {
HSSFCell cell = row.getCell(j);
String sex = cell.getStringCellValue();
u.setSex(sex);
}
}
list.add(u);
// 關閉資源
workbook.close();
}
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
5、結果展示
[User [id=1, name=name 1, sex=男], User [id=2, name=name 2, sex=男], User [id=3, name=name 3, sex=男], User [id=4, name=name 4, sex=男], User [id=5, name=name 5, sex=男], User [id=6, name=name 6, sex=男], User [id=7, name=name 7, sex=男], User [id=8, name=name 8, sex=男], User [id=9, name=name 9, sex=男], User [id=10, name=name 10, sex=男]]
與原始數據一致,這里之所以將讀取結果封裝到User對象,然后將User對象添加到集合中,是考慮到實際業務處理,所以沒有將單元格內容直接打印輸出。
6、利用POI寫入數據到excel表格中
package com.hello.world.poi;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
/*
* 利用POI創建excel文件,并寫入數據
*/
public class PoiWrite {
public static void main(String[] args) {
// 表頭信息
String[] titles = { "id", "name", "sex" };
// 創建workbook
HSSFWorkbook workbook = new HSSFWorkbook();
// 創建sheet
HSSFSheet sheet = workbook.createSheet("poi");
// 創建第一行
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < titles.length; i++) {
// 將標題添加到第一行里
HSSFCell cell = row.createCell(i);
cell.setCellValue(titles[i]);
}
// 從第二行開始添加數據,一共十行
for (int i = 1; i < 11; i++) {
// 得到每一行的對象
HSSFRow row2 = sheet.createRow(i);
// 為第一個單元格賦值
HSSFCell cell2 = row2.createCell(0);
cell2.setCellValue(i + "");
// 為第二個單元格賦值
cell2 = row2.createCell(1);
cell2.setCellValue("name " + i);
// 為第三個單元格賦值
cell2 = row2.createCell(2);
cell2.setCellValue("男");
}
try {
File file = new File("D:\\excel\\poi_test2.xls");
FileOutputStream out = FileUtils.openOutputStream(file);
workbook.write(out);
workbook.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果展示:
表格的樣式也可以進行設置,這里就不詳細介紹了,有興趣的同學可以查看POI官方文檔
智能推薦
pandas讀寫excel文件
https://www.cnblogs.com/everfight/p/pandas_select_rows.html https://blog.csdn.net/midion9/article/details/89000131 https://blog.csdn.net/fengqiaoxian/article/details/80415354 萬能的pandas能處理excel的20多萬行數據...
openpyxl讀寫Excel文件
1. 前言 python里面操作Excel文件有xlrd和xlwt這兩個模塊,xlrd用于讀文件,xlwt用于寫文件。但是xlwt對.xlsx格式的文件支持的不好。OpenPyXL模塊可以用來操作.xlsx格式的文件。下面給出兩個簡單的demo。 安裝命令: 2. 寫操作 文件顯示結果: 3. 讀文件 結果如下:...
Python——Excel文件讀寫
最新做測試案例時,需要使用*.xls文件作為輸入,然后發現對于Excel文件,python有第三方庫,官網地址為Working with Excel Files in Python,其中包含多個庫。這里我選用的是xlrd,官網里有文檔鏈接 xlrd cell object(單元格對象)包含三個屬性:ctype, value和xf_index. Python中,cell(單元格)的類型和對應的類型值...
Python 讀寫excel文件
最近需要用到Python來操作excel表,讀取表格內容到數據庫。所以就搜索了相關資料。 查找了一下,可以操作excel表的幾個庫有以下幾個: openpyxl 這個是推薦使用的庫,可以讀寫Excel 2010以上格式,以.xlsx結尾的文件。 xlsxwriter 這個支持.xlsx,但是只支持寫入,格式化等操作,不支持讀取。 xlrd 這個支持讀取數據,支持以xls結尾的文件,也就是比較老的格...
android讀寫excel文件
android操作excel文件需要用到第三方jar文件,共有兩種jar文件可以供android來操作excel文件:poi.jar和jxl.jar.兩者這要的區別在于poi.jar可以操作excel2007之前的,而jxl.jar只能操作excel2003以前的。接下來分別實現這兩種方式的excel文件讀寫。 ·poi.jar 下載poi.jar包 http://poi.apach...
猜你喜歡
python ——讀寫Excel文件
本節介紹xlrd和xlwt庫讀寫excel文件,使用這些庫的好處在于它不需要使用COM接口驅動Microsoft excel,因此不需要安裝office套件就可以操作excel文件。 1. 讀Excel文件 在xlwt中,用xlwt.Workbook對象表示Excel文件,通過操作此對象可修改Excel文檔內容,最后調用其save()方法將文檔保存成文件。通過操作Workbook對象可創建如下對象...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...