【问题标题】:Storing ArrayList in Excel using Apache POI HSSF使用 Apache POI HSSF 在 Excel 中存储 ArrayList
【发布时间】:2020-10-01 00:22:53
【问题描述】:

我有一个数据列表:

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?
}

【问题讨论】:

  • data1的内容是什么?
  • 您已经找到了所有需要的方法:在 for 循环中调用:`HSSFRow row=sheet.createRow(i++) 并使用当前迭代器元素中的数据创建 3 个单元格。
  • 可以写成代码吗
  • {Loginid, customerid, updatetime}

标签: java apache-poi


【解决方案1】:

您没有明确说明您的列表包含什么。 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;
    }

【讨论】: