https://www.cnblogs.com/wangyang108/p/6030420.html
************************************************************
Excel是我們平時工作中比較常用的用於存儲二維表數據的,JAVA也可以直接對Excel進行操作,在這篇博客中將為大家介紹兩種操作Excel的方式,分別為:jxl和poi。
對於兩者的區別網上有測試如下:
測試結果
類型 數據量(行) 執行時間(ms) 執行時間(ms) 執行時間(ms) 平均時間(ms)
POI 1000 579 562 532 558
JXL 1000 500 469 484 484
POI 5000 984 984 969 979
JXL 5000 922 860 890 891
POI 10000 1609 1594 1641 1615
JXL 10000 1437 1453 1406 1432
POI 30000 3782 3765 3828 3792
JXL 30000 3922 3906 3922 3917
POI 50000 5953 6484 5859 6099
JXL 50000 6765 7421 6984 7057
在小數據量時jxl快於poi,在大數據量時poi要快於jxl。但差距都不明顯。
(一)jxl
寫Excel
import java.io.File; import java.io.IOException; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; /** * jxl寫Excel * * @author jianggujin * */ public class JxlWriteDemo { public static void main(String[] args) throws IOException, WriteException { File xlsFile = new File("jxl.xls"); // 創建一個工作簿 WritableWorkbook workbook = Workbook.createWorkbook(xlsFile); // 創建一個工作表 WritableSheet sheet = workbook.createSheet("sheet1", 0); for (int row = 0; row < 10; row++) { for (int col = 0; col < 10; col++) { // 向工作表中添加數據 sheet.addCell(new Label(col, row, "data" + row + col)); } } workbook.write(); workbook.close(); } }
讀Excel
import java.io.File; import java.io.IOException; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; /** * jxl讀excel * * @author jianggujin * */ public class JxlReadDemo { public static void main(String[] args) throws BiffException, IOException { File xlsFile = new File("jxl.xls"); // 獲得工作簿對象 Workbook workbook = Workbook.getWorkbook(xlsFile); // 獲得所有工作表 Sheet[] sheets = workbook.getSheets(); // 遍歷工作表 if (sheets != null) { for (Sheet sheet : sheets) { // 獲得行數 int rows = sheet.getRows(); // 獲得列數 int cols = sheet.getColumns(); // 讀取數據 for (int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { System.out.printf("%10s", sheet.getCell(col, row) .getContents()); } System.out.println(); } } } workbook.close(); } }
(二)poi
寫Excel
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * Poi寫Excel * * @author jianggujin * */ public class PoiWriteDemo { public static void main(String[] args) throws IOException { // 創建工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); // 創建工作表 HSSFSheet sheet = workbook.createSheet("sheet1"); for (int row = 0; row < 10; row++) { HSSFRow rows = sheet.createRow(row); for (int col = 0; col < 10; col++) { // 向工作表中添加數據 rows.createCell(col).setCellValue("data" + row + col); } } File xlsFile = new File("poi.xls"); FileOutputStream xlsStream = new FileOutputStream(xlsFile); workbook.write(xlsStream); } }
讀Excel
import java.io.File; import java.io.IOException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; /** * Poi寫Excel * * @author jianggujin * */ public class PoiReadDemo { public static void main(String[] args) throws IOException, InvalidFormatException { File xlsFile = new File("poi.xls"); // 獲得工作簿 Workbook workbook = WorkbookFactory.create(xlsFile); // 獲得工作表個數 int sheetCount = workbook.getNumberOfSheets(); // 遍歷工作表 for (int i = 0; i < sheetCount; i++) { Sheet sheet = workbook.getSheetAt(i); // 獲得行數 int rows = sheet.getLastRowNum() + 1; // 獲得列數,先獲得一行,在得到改行列數 Row tmp = sheet.getRow(0); if (tmp == null) { continue; } int cols = tmp.getPhysicalNumberOfCells(); // 讀取數據 for (int row = 0; row < rows; row++) { Row r = sheet.getRow(row); for (int col = 0; col < cols; col++) { System.out.printf("%10s", r.getCell(col).getStringCellValue()); } System.out.println(); } } } }