1. 程式人生 > >java操作excel常用的兩種方式

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();
         }
      }
   }
}