1. 程式人生 > 程式設計 >Java實現匯入匯出Excel檔案的方法(poi,jxl)

Java實現匯入匯出Excel檔案的方法(poi,jxl)

目前,比較常用的實現Java匯入、匯出Excel的技術有兩種Jakarta POI和Java Excel直接上程式碼:

一,POI

POI是apache的專案,可對微軟的Word,Excel,Ppt進行操作,包括office2003和2007,Excl2003和2007。poi現在一直有更新。所以現在主流使用POI。

xls:

pom:

<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.2</version>
</dependency>

匯出:

public class PoiCreateExcel {

 public static void main(String[] args) {
  // 建立表頭
  String[] title = {"id","name","sex"};
  //建立Excel工作薄
  HSSFWorkbook workbook = new HSSFWorkbook();
  //建立一個工作表sheet
  HSSFSheet sheet = workbook.createSheet();
  //建立第一行
  HSSFRow row = sheet.createRow(0);
  HSSFCell cell = null;
  // 插入第一行
  for (int i = 0; i < title.length; i++) {
   cell = row.createCell(i);
   cell.setCellValue(title[i]);
  }
  // 追加資料
  for (int i = 1; i < 10; i++) {// 這裡的int 起始是1 也就是第二行開始
   HSSFRow nexTrow = sheet.createRow(i);
   HSSFCell cell2 = nexTrow.createCell(0);
   cell2.setCellValue("a"+i);
   cell2 = nexTrow.createCell(1);
   cell2.setCellValue("user");
   cell2 = nexTrow.createCell(2);
   cell2.setCellValue("男");
  }
  // 建立一個檔案
  File file = new File("d:/poi.xls");
  try {
   file.createNewFile();
   // 將內容存檔
   FileOutputStream stream = FileUtils.openOutputStream(file);
   workbook.write(stream);

   stream.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

匯入:

public class PoiReadExcel {

 public static void main(String[] args) {

  // 引入需要解析的檔案
  File file = new File("d:/poi.xls");
  try {
   // 建立Excel 讀取檔案內容
   HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
   /**
    * 第一種方式讀取Sheet頁
    */
//   HSSFSheet sheet = workbook.getSheet("Sheet0");
   /**
    * 第二種方式讀取Sheet頁
    */
   HSSFSheet sheet = workbook.getSheetAt(0);
   int firstRowNum = 0;// 起始行第0行
   int lasrRowNum = sheet.getLastRowNum();// 一直讀到最後一行
   for (int i = 0; i < lasrRowNum; i++) {
    HSSFRow row = sheet.getRow(i);
    // 獲取當前最後單元格列號
    int lastCellNum = row.getLastCellNum();
    for (int j = 0; j < lastCellNum; j++) {
     HSSFCell cell = row.getCell(j);
     String value = cell.getStringCellValue();// 注意! 如果Excel 裡面的值是String 那麼getStringCellValue 如果是其他型別 則需要修改
     System.out.print(value + " ");
    }
    System.out.println();
   }

  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

xlsx:

pom:

<!-- poi高版本額外包 -->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-examples</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-excelant</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
 	<artifactId>poi-ooxml</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml-schemas</artifactId>
	<version>3.9</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-scratchpad</artifactId>
 	<version>3.9</version>
</dependency>

匯出:

public class PoiCreateExcel {

 public static void main(String[] args) {
  // 建立表頭
  String[] title = {"id","sex"};
  //建立Excel工作薄
  XSSFWorkbook workbook = new XSSFWorkbook();
  //建立一個工作表shheet
  Sheet sheet = workbook.createSheet();
  //建立第一行
  Row row = sheet.createRow(0);
  Cell cell = null;
  // 插入第一行
  for (int i = 0; i < title.length; i++) {
   cell = row.createCell(i);
   cell.setCellValue(title[i]);
  }
  // 追加資料
  for (int i = 1; i < 10; i++) {// 這裡的int 起始是1 也就是第二行開始
   Row nexTrow = sheet.createRow(i);
   Cell cell2 = nexTrow.createCell(0);
   cell2.setCellValue("a"+i);
   cell2 = nexTrow.createCell(1);
   cell2.setCellValue("user");
   cell2 = nexTrow.createCell(2);
   cell2.setCellValue("男");
  }
  // 建立一個檔案
  File file = new File("d:/poi.xlsx");// 這裡可以修改成高版本的
  try {
   file.createNewFile();
   // 將內容存檔
   FileOutputStream stream = FileUtils.openOutputStream(file);
   workbook.write(stream);

   stream.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

匯入:

public class PoiReadExcel {
 public List<Double> readExcels(InputStream is)throws Exception{
  List<Double> xlsxList = new ArrayList<Double>();
  try {
   if(is ==null){
    throw new IOException("檔案不正確!");
   }
   Workbook workbook = WorkbookFactory.create(is);
   FormulaEvaluator fe = workbook.getCreationHelper().createFormulaEvaluator();
   //獲取第一張表
   Sheet sheet = workbook.getSheetAt(0);
   if(sheet == null){
    throw new IOException("傳入的excel的第一張表為空!");
   }
   for(int rowNum = 0;rowNum <= sheet.getLastRowNum(); rowNum++){
    Row row = sheet.getRow(rowNum);
    if(row != null){
     //獲得當前行的開始列 
     int firstCellNum = row.getFirstCellNum();
     //獲得當前行的列數 
     int lastCellNum = row.getPhysicalNumberOfCells();
     String result = "";
     //迴圈當前行 
     for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
      Cell cell = row.getCell(cellNum);
      double value = 0;
      String valueString = cell.getStringCellValue();
      if(null!=fe.evaluate(cell)){
       value = fe.evaluate(cell).getNumberValue();
      }
      //result = result + cellNum + ":"+value + "----";
      result = result + cellNum + ":"+valueString + "----";
     }
     System.out.println(result + " ");
    }
   }
   is.close();
  } catch (FileNotFoundException e) {
  throw new Exception("檔案不正確!");
 }
  return xlsxList;
 }

 public static void main(String[] args) throws Exception {
  InputStream is = new FileInputStream("d:/poi.xlsx");
  PoiReadExcel re = new PoiReadExcel();
  re.readExcels(is);
 }
}

二,JXL

JXL只能對Excel進行操作,屬於比較老的框架,它只支援到Excel 95-2000的版本。現在已經停止更新和維護。

pom:

<!-- jxl -->
<dependency>
	<groupId>net.sourceforge.jexcelapi</groupId>
	<artifactId>jxl</artifactId>
	<version>2.6.10</version>
</dependency>

匯出:

public class JxlCreateExcel {

 public static void main(String[] args) {
  // 首先設定表格第一行 表格頭名稱 也就是列名
  String [] title = {"id","sex"};
  // 建立Excel檔案 存入路徑
  File file = new File("d:/jxl.xls");
  try {
   file.createNewFile();
   // 建立工作薄
   WritableWorkbook workbook = Workbook.createWorkbook(file);
   // 建立sheet
   WritableSheet sheet = workbook.createSheet("sheet1",0);
   // 新增資料
   Label label = null;
   // 第一行設定列名
   for (int i = 0; i < title.length; i++) {
    label = new Label(i,title[i]);
    sheet.addCell(label);
   }
   // 追加資料 從第二行開始 i從1開始
   for (int i = 1; i < 9; i++) {
    label = new Label(0,i,"id:"+i);
    sheet.addCell(label);
    label = new Label(1,"user");
    sheet.addCell(label);
    label = new Label(2,"男");
    sheet.addCell(label);
   }
   // 寫入 並在最後關閉流
   workbook.write();
   workbook.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

匯入:

public class JxlReadExcel {

 public static void main(String[] args) {
  try {
   // 建立 Workbook
   Workbook workbook = Workbook.getWorkbook(new File("d:/jxl.xls"));
   // 獲取工作表sheet
   Sheet sheet = workbook.getSheet(0);
   // 獲取資料
   for (int i = 0; i < sheet.getRows(); i++) {// 獲取行
    for (int j = 0; j < sheet.getColumns(); j++) {// 獲取列
     Cell cell = sheet.getCell(j,i);
     System.out.print(cell.getContents() + " ");// 得到單元格的內容
    }
    System.out.println();
   }
   workbook.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

到此,程式碼可直接部署執行,希望可以幫助到你~

總結

到此這篇關於Java實現匯入匯出Excel檔案的方法(poi,jxl)的文章就介紹到這了,更多相關java實現匯入匯出excel檔案內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!