在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