Apache POI讀寫Excel
阿新 • • 發佈:2020-11-20
Apache POI是Apache軟體基金會的開放原始碼函式庫,POIAPI給Java程式對Microsoft Office格式檔案讀和寫的功能。
官方文件
相關類
類名 | 對應檔案型別 |
---|---|
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"));
}
}