java操作excel常用的兩種方式
*****************************************************
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();
}
}
}
}