首页 > 解决方案 > 使用 Apache POI HSSF 在 Excel 中存储 ArrayList

问题描述

我有一个数据列表:

List data1 = (List) session.getAttribute("data"); 

现在,我希望将这些数据存储在 Excel 文件中:

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("Excel Sheet");

HSSFRow rowhead = sheet.createRow((short) 0);

rowhead.createCell((short) 0).setCellValue("lOGINID");
rowhead.createCell((short) 1).setCellValue("CUSTOMERID");
rowhead.createCell((short) 2).setCellValue("updatetime");

int index = 1;
for (itr = data1.iterator(); itr.hasNext(); ) {
    // what to write here?
}

标签: javaapache-poi

解决方案


您还没有明确说明您的列表包含什么。List data1 = (List) session.getAttribute("data"); 它必须是List<SomeClass>

您可以简单地遍历列表,将对象拉到当前索引上,创建新行并填充单元格中的值

for (int i = 0; i < data1.size(); i++) { //iterate over the list

   SomeClass data = data1.get(i);//pull the object on current index i

   HSSFRow row = sheet.createRow(i + 1); //create new row

   //fill the values
   row.createCell(0).setCellValue(data.field1);
   row.createCell(1).setCellValue(data.field2);
   row.createCell(2).setCellValue(data.field3);

假设列表包含的完整示例RowData

import lombok.AllArgsConstructor;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 

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

    void writeList() throws IOException {
        //read data , RowData can be different in your case
        List<RowData> data1 = (List<RowData>) session.getAttribute("data"); 

        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("Excel Sheet");

        HSSFRow rowhead = sheet.createRow(0); //header

        rowhead.createCell(0).setCellValue("lOGINID");
        rowhead.createCell(1).setCellValue("CUSTOMERID");
        rowhead.createCell(2).setCellValue("updatetime");

        for (int i = 0; i < data1.size(); i++) {

            RowData data = data1.get(i);//rows

            HSSFRow row = sheet.createRow(i + 1);

            row.createCell(0).setCellValue(data.loginId);
            row.createCell(1).setCellValue(data.customerId);
            row.createCell(2).setCellValue(data.time);
        }

        //write to file
        try (FileOutputStream out = new FileOutputStream("test.xlsx")) {
            wb.write(out);
        }
    }


    @AllArgsConstructor
    class RowData {
        String loginId;
        String customerId;
        String time;
    }


推荐阅读