Apache POI讀寫Excel
Apache POI是Apache軟體基金會的開放源碼函式庫,POIAPI給Java程式對Microsoft Office格式檔案讀和寫的功能。
官方文檔
[//poi.apache.org/]
相關類
類名 |
對應文件類型 |
HSSF |
讀寫Microsoft Excel XLS |
XSSF |
讀寫Microsoft Excel OOXML XLSX |
HWPF |
讀寫Microsoft Word DOC97 |
XWPF |
讀寫Microsoft Word DOC2003 |
XSLF |
讀寫Microsoft PowerPoint |
XDGF |
讀Microsoft Visio |
XPBF |
讀Microsoft Publisher |
XSMF |
讀Microsoft Outlook |
XLSX相關類及方法
常用類
類名 |
對應關係 |
XSSFWorkbook |
工作薄(可以理解為.xlsx的文件) |
XSSFSheet |
Excel表(就是創建Excel文件時默認創建的Sheet1那種表格) |
XSSFRow |
表格中的一行數據 |
XSSFCell |
表格一行中的一個單元格 |
XSSFCellStyle |
單元格樣式 |
XSSFFont |
字體 |
XSSFHeader |
Sheet的頁眉 |
XSSFFooter |
Sheet的頁腳 |
DocumentSummaryInformation |
文件摘要資訊 |
CellRangeAddress |
單元格範圍地址,通常合併單元格時使用 |
常用方法
構造方法
方法名 |
說明 |
XSSFWorkbook() |
|
XSSFWorkbook(InputStream is) |
(is為要讀的文件的輸入流) |
XSSFWorkbook(File file) |
按文件對象讀取 |
XSSFWorkbook(String path) |
按文件路徑讀取 |
XSSFWorkbook常用方法
方法名 |
返回類型 |
說明 |
getNumberOfSheets() |
int |
獲取工作薄中表的個數 |
getSheet(String name) |
XSSFSheet |
按表名獲取表 |
getSheetAt(int index) |
XSSFSheet |
按表序號獲取表 |
getSheetIndex(String name) |
int |
獲取指定表名的表序號 |
getSheetIndex(Sheet sheet) |
int |
按表獲取它的序號 |
removeSheetAt(int index) |
void |
刪除指定序號的表 |
write(OutputStream var1) |
void |
將記憶體中的Excel寫入到文件 |
createCellStyle() |
XSSFCellStyle |
創建一個單元格格式 |
XSSFSheet常用方法
方法名 |
返回類型 |
說明 |
createRow(int rownum) |
HSSFRow |
在指定行創建一個新行 |
getRow(int index) |
HSSFRow |
獲取一行數據 |
getFirstRowNum() |
int |
獲取從上到下第一行有數據的行所在行號 |
getLastRowNum() |
int |
獲取從下到上第一行有數據的行所在行號 |
addMergedRegion(CellRangeAddress region) |
int |
合併單元格 |
autoSizeColumn(int column) |
void |
自動調整指定列的寬度 |
setColumnWidth(int columnIndex, int width) |
void |
設置某一列的寬度,width=字元個數 * 256,例如20個字元的寬度就是20 * 256 |
XSSFRow常用方法
方法名 |
返回類型 |
說明 |
createCell(int column) |
XSSFCell |
創建一個單元格 |
createCell(int columnIndex, CellType type) |
XSSFCell |
創建指定單元格格式的單元格 |
getCell(int cellnum) |
XSSFCell |
獲取指定行中指定索引的單元格 |
setHeight(short height) |
void |
設置行高 |
XSSFCell常用方法
方法名 |
返回類型 |
說明 |
setCellValue(String value) |
void |
設置單元格內容 |
setCellValue(double value) |
void |
同上 |
setCellValue(Date value) |
void |
同上 |
setCellValue(LocalDateTime value) |
void |
同上 |
setCellValue(Calendar value) |
void |
同上 |
toString() |
String |
將單元格中的內容轉換為String返回 |
setCellFormula(String formula) |
void |
設置單元格計算公式 |
setCellStyle(CellStyle style) |
void |
設置單元格格式 |
XSSFFont常用方法
方法名 |
返回類型 |
說明 |
setColor(short color) |
void |
設置字體顏色 |
setBold(boolean bold) |
void |
設置是否粗體 |
setItalic(boolean italic) |
void |
設置傾斜 |
setUnderline(byte underline) |
void |
設置下劃線 |
XSSFCellStyle常用方法
方法名 |
返回類型 |
說明 |
setFont(Font font) |
void |
為單元格設置字體樣式 |
setAlignment(HorizontalAlignment align) |
void |
設置水平對齊方式 |
setVerticalAlignment(VerticalAlignment align) |
void |
設置垂直對齊方式 |
setFillForegroundColor(short bg) |
void |
設置前景色 |
setFillBackgroundColor(short bg) |
void |
設置背景顏色 |
示例
導包
將下載下來的包中所有的docs文件夾同目錄下的所有jar包、lib文件夾、ooxml-lib文件夾導入到工程中
讀入
樣例表
用戶編號 |
用戶名 |
密碼 |
姓名 |
性別 |
年齡 |
1 |
zs |
123 |
張三 |
男 |
18 |
2 |
ls |
ls |
李四 |
男 |
18 |
3 |
rsb |
rsb |
rsb |
男 |
16 |
5 |
rbj |
rbj |
rbj |
男 |
15 |
7 |
ssq |
ssq |
ssq |
女 |
14 |
8 |
iow |
iow |
iow |
男 |
7 |
9 |
auf |
auf |
auf |
男 |
9 |
10 |
atv |
atv |
atv |
男 |
12 |
11 |
soc |
soc |
soc |
女 |
5 |
12 |
wqo |
wqo |
wqo |
男 |
12 |
import org.apache.poi.xssf.usermodel.*;
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws IOException {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(is);
//獲取索引為0的sheet表格
XSSFSheet sheet = workbook.getSheetAt(0);
//獲取表格中有內容的首行行號
int first = sheet.getFirstRowNum();
//獲取表格中有內容的尾行行號
int last = sheet.getLastRowNum();
//從首行開始獲取,首行為表頭
XSSFRow row = sheet.getRow(0);
XSSFCell cell = row.getCell(0);
System.out.print(cell.toString() + "\t");
cell = row.getCell(1);
System.out.print(cell.toString() + "\t");
cell = row.getCell(2);
System.out.print(cell.toString() + "\t");
cell = row.getCell(3);
System.out.print(cell.toString() + "\t");
cell = row.getCell(4);
System.out.print(cell.toString() + "\t");
cell = row.getCell(5);
System.out.println(cell.toString() + "\t");
for (int i = first + 1|i <= last|++i) {
row = sheet.getRow(i);
cell = row.getCell(0);
int uid = Integer.valueOf(cell.toString().replace(".0", ""));
cell = row.getCell(1);
String uname = cell.toString();
cell = row.getCell(2);
String upass = cell.toString();
cell = row.getCell(3);
String truename = cell.toString();
cell = row.getCell(4);
String sex = cell.toString();
cell = row.getCell(5);
int age = Integer.valueOf(cell.toString().replace(".0", ""));
System.out.println(new User(uid, uname, upass, truename, sex, age));
}
}
}
用戶編號 用戶名 密碼 姓名 性別 年齡
1 zs 123.0 張三 男 18
2 ls ls 李四 男 18
3 rsb rsb rsb 男 16
5 rbj rbj rbj 男 15
7 ssq ssq ssq 女 14
8 iow iow iow 男 7
9 auf auf auf 男 9
10 atv atv atv 男 12
11 soc soc soc 女 5
12 wqo wqo wqo 男 12
寫出
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
public class Write {
public static void main(String[] args) throws IOException {
//新建一個工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//在工作薄中新建一個名為寫入的sheet表
XSSFSheet sheet = workbook.createSheet("寫入");
//創建一行作為表頭
XSSFRow row = sheet.createRow(0);
//向表頭寫入內容
XSSFCell cell = row.createCell(0);
cell.setCellValue("用戶編號");
cell = row.createCell(1);
cell.setCellValue("用戶名");
cell = row.createCell(2);
cell.setCellValue("密碼");
cell = row.createCell(3);
cell.setCellValue("姓名");
cell = row.createCell(4);
cell.setCellValue("性別");
cell = row.createCell(5);
cell.setCellValue("年齡");
//寫入其他內容同理
//測試合併單元格
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellValue(1);
cell = row.createCell(1);
cell.setCellValue(2);
cell = row.createCell(2);
cell.setCellValue(3);
sheet.addMergedRegion(new CellRangeAddress(1,1,0,3));
cell = row.getCell(0);
//讓工作薄創建一個單元格格式
XSSFCellStyle style = workbook.createCellStyle();
//設置水平對齊方式
style.setAlignment(HorizontalAlignment.CENTER);
//設置垂直對齊方式
style.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(style);
workbook.write(new FileOutputStream("write.xlsx"));
}
}