当前位置: 首页 > 知识库问答 >
问题:

无法在excel文件中写入具有Apache POI的连续单元格值

蔚学真
2023-03-14

我不知道为什么我不能用setCellValue()写2个单元格值,它只更新x1单元格中的1个值,而x2单元格不更新。我有一个文件excel,我想更新这个文件的值,数据来自arraylist listThoaiThang,tt.getNoIbo()和tt.getNgoAimang()是一个字符串,当日志记录时不是null。

代码在下面,谢谢。

public void writeFile(ArrayList<LLThoaiNoiHat> llList) {
    FileInputStream fis = null;
    try {
        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
        String date1 = dateFormat.format(new Date()).toString();
        File tongHop = new File("Thongke_LL_NOIHAT_VTT_" + date1 + ".xlsx");
        copyFileUsingApacheCommonsIO(new File("Mau_Thongke_LL_NOIHAT_VTT.xlsx"), tongHop);  //copy sample file before edit data
        fis = new FileInputStream(tongHop);
        BufferedInputStream bis = new BufferedInputStream(fis);
        XSSFWorkbook  workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0);
        fis.close();
        int rowNum = 9;
        Row row;

        ArrayList<LLThoaiThang> listThoaiThang;
        for (LLThoaiNoiHat tnh : llList) {
            row = sheet.getRow(rowNum++);
            int colNum = 2;
            listThoaiThang =tnh.getListThoaiThang();
            for (LLThoaiThang tt :listThoaiThang ) {
                int aa = tt.getThang() / 2+3;
                Cell x1 = row.getCell(aa);
                x1.setCellValue(tt.getNoiBo()); //only first cell ok
                Cell x2 = row.getCell(aa+1);
                x2.setCellValue(tt.getNgoaiMang());//this cell cannot change value and all cell after cannot change value
            }

        }

        FileOutputStream outFile = new FileOutputStream(tongHop);
        workbook.write(outFile);
        outFile.close();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

共有1个答案

邢宏浚
2023-03-14

我发现这里的问题是如果你将一个数字值设置为字符串,它将不会在单元格之后更新,我认为这是apache POI的问题,所以答案是:

for (LLThoaiThang tt :listThoaiThang ) {
                int aa = tt.getThang() / 2+3;
                Cell x1 = row.getCell(aa);
                if(!tt.getNoiBo().isEmpty())
                    x1.setCellValue(Double.parseDouble(tt.getNoiBo())); //only this cell ok
                Cell x2 = row.getCell(aa+1);
                if(!tt.getNgoaiMang().isEmpty())
                    x2.setCellValue(Double.parseDouble(tt.getNgoaiMang()));;
}
 类似资料:
  • 如何使用Apache POI将文本/图像写入特定的合并单元格。特定单元格意味着,我直接将文本或图像写入B3: D7。下面的代码是每个索引的手动代码,而不是单元格的特定名称和数量。我想通过单元格名称和编号放置。

  • 我对Eclipse Java编码一无所知。我正在努力完成一个管理库存的项目。我遇到的问题是,当我试图将项目写入excel单元格时,我收到错误消息,称数组超出了界限。 附言:项目和item.get部分名称等都定义在另一个类文件下。请帮忙。谢谢

  • 我使用POI API从Postgres数据库生成了excel文档。第一列“Ordre”有许多相同的值。但是我想合并具有相同值的单元格。 我想遵循这个算法: 在字段“ordre”中循环 如果单元格(i)=单元格(i1) 而不是合并它们 但是我有一个问题,在Java中如何说,我不希望它能给出一些令人满意的结果,我开始写这段代码: 任何建议都将不胜感激

  • 我在把数据写到excel文件时遇到了问题。我使用的是apache POI 4.1.2版本库。下面是示例代码。 在excel文件中保存的最后一列单元格中,以前的单元格保持为空白。请帮忙,如果我做错了什么,请告诉我?

  • 我正在写一个程序,它需要从excel文件中读取和写入数据,而不考虑格式(xls或xlsx)。 我知道ApachePOI,但它似乎有不同的类来处理xls文件(HSSF)和xlsx(XSSF)文件。 任何人都知道我将如何实现我在这里的目标。(也欢迎使用POI以外的API的想法)。

  • 问题内容: 如何在poi的帮助下在单元格中写下我的全部价值? 即如果值是1000.000,那么我怎么能写出完整的值而不会在“之后”截断000。与POI?表示我想要全部价值。 就我而言,只需要1000,但这对我来说不是正确的格式。 问题答案: 您必须设置要存储此数字的单元格的“格式”。示例代码: 来源:http : //poi.apache.org/spreadsheet/quick- guide.