How to write Excel files in java using Apache POI

摘要:上一篇我们学习了通过poi读取excel里面的内容,那么在这篇文章中,我们将看到如何使用Apache POI示例在java中编写excel。Apache POI项目的任务是创建和维护Java api,用于根据Office Open XML标准(OOXML)和微软的OLE 2复合文档格式(OLE2)来操作各种文件格式。简而言之,您可以使用Java读写MS Excel文件。

关于Apache POI的一些基本知识:在java中读/写excel时,会遇到两个类

HSSF: 用于处理excel 2003或更早(.xls)的文件。一些具有HSSF前缀的类是HSSFWorkbook、HSSFSheet、HSSFRow和HSSFCell

SSF: 用于处理excel 2007或稍后(.xlsx)的文件。一些带有XSSF前缀的类是XSSFWorkbook、XSSFSheet、XSSFRow和XSSFCell

这里有一些你需要注意的类:

Workbook : 这是代表excel工作簿的高级类
Sheet : 这是表示excel表的高级类。
Row : 这是代表excel行的高级类。它有与行相关的方法

Cell: 这是代表单个excel单元的高级类。它有与cell相关的方法,例如:getDataType()。

项目结构:


Dependency:
<!-- poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.14</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.14</version>
    </dependency>

使用poi编写excel文件:

1.创建一个空白工作簿

XSSFWorkbook workbook = new XSSFWorkbook();

2.创建一张表并传递该表格的名称

XSSFSheet sheet = workbook.createSheet("Country");

3.创建行

Row row = sheet.createRow(rownum++);

4.创建单元格,设置它的值并将单元格添加到上面一行

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

5.重复3和4,直到有数据

Java Program:

我们将编写一个名为“CountriesDetails.xlsx”的excel文件。创建WriteExcelMain.java如下

package com.micai.poi;

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;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;

/**
 * 描述:How to write Excel files in java using Apache POI
 * <p>
 *
 * @author: 赵新国
 * @date: 2018/6/7 15:48
 */
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[]{"India","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 outputStream = new FileOutputStream(new File("src/main/resources/CountriesDetails.xlsx"));
            workbook.write(outputStream);
            outputStream.close();
            System.out.println("CountriesDetails.xlsx has been created successfully");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            workbook.close();
        }
    }
}
当您运行在程序之上时,您将得到以下输出:


现在让我们看一下CountriesDetails.xlsx的内容:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷彩的博客

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值