在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

