在Java中如何使用Apache Poi写Excel文件

时间:2020-02-23 14:34:24  来源:igfitidea点击:

在本教程中,我们将看到在Java中如何使用Apache Poi写Excel文件。

关于Apache Poi项目:

Apache Poi项目的使命是根据Office打开XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)来创建和维护Java API以便操纵各种文件格式。
简而言之,我们可以使用Java读取和写入MS Excel文件。

一些关于Apache Poi的基础知识:

在Java 中读取/写入Excel时,我们遇到了两个前缀:

HSSF用于处理文件Excel 2003或者更早版本(。
xls)。
HSSF前缀的一些类是HSSFWorkbook,HSSFSheet,HSSFrow和HSSFCell。
XSSF:用于处理文件Excel 2007或者更高版本(.xlsx)。具有XSSF前缀的一些类是XSSFWorkbook,XSSFSheet,XSSFrow和XSSFCell。

以下是我们需要了解的程序。

  • 工作簿:这是代表Excel工作簿的高级等级。
  • 表:这是表示Excel表的高级等级。
  • 行:这是表示Excel行的高级类。它有与行有关的方法。
  • 单元:这是表示单个Excel单元的高级等级。它具有与单元格相关的方法,例如:getDatatype()。

依赖性:

如果我们使用的是maven,则需要在pom.xml中添加以下依赖项。

org.apache.poi
   poi
   3.13
  
  
   org.apache.poi
   poi-ooxml
   3.13

如果我们不使用Maven,则需要在ClassPath中添加以下JAR。

  • poi-3.13.jar.
  • Commons-codec-1.9.jar
  • poi-ooxml-3.13.jar
  • Poi-oOxML-Schemas-3.13.jar
  • XMLBeans-2.6.0.jar.
  • stax-api-1.0.1.jar

使用POI写下Excel文件:

  • 创建一个空白的工作簿
XSSFWorkbook workbook = new XSSFWorkbook();
  • 创建表格和页面的名称
XSSFSheet sheet = workbook.createSheet(“Country");
  • 创建行
Row row = sheet.createRow(rownum++);
  • 创建单元格,设置其值并将单元格添加到上方
Cell cell = row.createCell(cellnum++); 
if(obj instanceof String) cell.setCellValue((String)obj); 
else if(obj instanceof Double) cell.setCellValue((Double)obj); 
else if(obj instanceof Integer) cell.setCellValue((Integer)obj);
  • 重复3和4,直到我们有数据

Java程序:

我们将编写名为”CountriesDetails.xlsx"的excel文件
创建WriteExcelMain.java文件如下所示

package org.igi.theitroad;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
 
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class WriteExcelMain {
 
 public static void main(String[] args) throws IOException {
  writeFileUsingPOI();
 }
 
 public static void writeFileUsingPOI() throws IOException 
 {
  //create blank workbook
  XSSFWorkbook workbook = new XSSFWorkbook(); 
 
  //Create a blank sheet
  XSSFSheet sheet = workbook.createSheet("Country");
 
  ArrayList<Object[]> data=new ArrayList<Object[]>();
  data.add(new String[]{"Country","Capital","Population"});
  data.add(new Object[]{"Netherlands","Delhi",10000});
  data.add(new Object[]{"France","Paris",40000});
  data.add(new Object[]{"Germany","Berlin",20000});
  data.add(new Object[]{"England","London",30000});
 
 
  //Iterate over data and write to sheet
  int rownum = 0;
  for (Object[] countries : data)
  {
   Row row = sheet.createRow(rownum++);
 
   int cellnum = 0;
   for (Object obj : countries)
   {
    Cell cell = row.createCell(cellnum++);
    if(obj instanceof String)
     cell.setCellValue((String)obj);
    else if(obj instanceof Double)
     cell.setCellValue((Double)obj);
    else if(obj instanceof Integer)
     cell.setCellValue((Integer)obj);
   }
  }
  try
  {
   //Write the workbook in file system
   FileOutputStream out = new FileOutputStream(new File("CountriesDetails.xlsx"));
   workbook.write(out);
   out.close();
   System.out.println("CountriesDetails.xlsx has been created successfully");
  } 
  catch (Exception e) 
  {
   e.printStackTrace();
  }
  finally {
   workbook.close();
  }
 }
 
 
}

运行上面的程序时,我们将获取以下输出:

CountriesDetails.xlsx has been created successfully