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

Java POI编辑excel文件-Cell.SetCellValue不工作

任繁
2023-03-14

我试图修改一个excel文件,但由于某种原因,我不理解cell.SetCellValue方法在我的代码中不起作用。我实际上正在做的是:-我正在打开一个excel文件,并将感兴趣的内容保存在一个HashMap中。这样工作,我可以打印HashMap的内容。-然后,我试图用保存在HashMap中的数据修改另一个excel文件,但由于某种原因,这没有发生。

    public File manipulateDocumentITM(File xlFile) {

// ADDING DATA FROM AN EXCEL FILE TO A HASHMAP

        HashMap<Integer, ArrayList<Date>> hashMap = new HashMap<>();
        try {
            FileInputStream inFile = new FileInputStream(xlFile);
            Workbook workbookInFile = new XSSFWorkbook(inFile);
            Sheet sheetInFile = workbookInFile.getSheetAt(0);
            Iterator<Row> rowIteratorInFile = sheetInFile.iterator();
            int rowCountInFile = 5, key = 0, countEmpty = 0, rowCountModelFile = 10;
            while (rowIteratorInFile.hasNext()) {
                ArrayList<Date> arrayList = new ArrayList<>();
                Row rowInFile = rowIteratorInFile.next();
                if (rowInFile.getRowNum() == rowCountInFile) {
                    key++;
                    Iterator<Cell> cellIteratorInFile = rowInFile.cellIterator();
                    arrayList = new ArrayList<>();
                    while (cellIteratorInFile.hasNext()) {
                        Cell cell = cellIteratorInFile.next();
                        if ((cell.getCellType() == CellType.NUMERIC) && (cell.getColumnIndex() != 0)) {
                            Date data = cell.getDateCellValue();
                            arrayList.add(data);
                        }
                    }
                    hashMap.put(key, arrayList);
                    rowCountInFile = rowCountInFile + 4;
                }
            }
    
        inFile.close();


// DATA SAVED IN HASHMAP ABOVE NEXT IM JUST PRINTING THE VALUES IN THE HASHMAP



            for (Integer I : hashMap.keySet()) {
                ArrayList<Date> replaceArray = hashMap.get(I);
                System.out.println("***");
                for (int i = 0; i < replaceArray.size(); i++) {
                    System.out.println(replaceArray.get(i).getHours());
                }
            }



// CODE THAT SUPPOSE TO MODIFY EXCEL FILE WITH THE DATA FROM THE HASHMAP



            String modelPath = "/home/h1dr0/Documents/unimineral/Model foaie de prezenta (another copy).xlsx";
            FileInputStream modelFile = new FileInputStream(modelPath);
            Workbook workbookModel = new XSSFWorkbook(modelFile);
            Sheet sheetModelFile = workbookModel.getSheetAt(0);
            Iterator<Row> rowIteratorModelFile = sheetModelFile.iterator();
            ArrayList<Date> replaceArray2 = new ArrayList<>();
                Iterator it = hashMap.entrySet().iterator();
                while (rowIteratorModelFile.hasNext()) {
                    Row rowModelFile = rowIteratorModelFile.next();
                    if (rowModelFile.getRowNum() == rowCountModelFile) {
                        Iterator<Cell> cellIteratorModelFile = rowModelFile.cellIterator();
                        Map.Entry pair = (Map.Entry)it.next();
                        replaceArray2 = (ArrayList<Date>) pair.getValue();
                        while (cellIteratorModelFile.hasNext()) {
                            Cell cell = cellIteratorModelFile.next();
                            if (replaceArray2.size() != 0) {
                                for (int i = 0; i < replaceArray2.size(); i++) {
                                    if ((replaceArray2.get(i).getHours() != 0) && replaceArray2.get(i).toString() != "" && (cell.getColumnIndex() != 18)) {
                                 
                                        

                                        // THIS DOES NOT WORK
                                        cell.setCellValue(replaceArray2.get(i).getHours());


                                    }
                                    else {
                                        cell.setCellValue(" ");
                                    }
                                }
                            } else {
                                cell.setCellValue(" ");
                            }
                        }
                    rowCountModelFile = rowCountModelFile + 3;
                    }
                }
            modelFile.close();
            //}
            FileOutputStream outputStream = new FileOutputStream("/home/h1dr0/Documents/unimineral/generate.xlsx",false);
            workbookModel.write(outputStream);
            outputStream.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return xlFile;
    }
cell.setCellValue(8);
  if(cell.getCellType() == CellType.NUMERIC) {
                                System.out.println("cell: " + cell.getNumericCellValue());
                            }

请帮忙,谢谢!

共有1个答案

葛烨
2023-03-14

Excel设计用于处理巨大的表。只有使用过的才存储在内存或文档中。这意味着在填充单元格之前,必须首先创建单元格。

在您的代码中,我只看到您遍历了现有的单元格,但没有尝试创建它们。也许这就是问题所在?

 类似资料:
  • 我正在经历一个问题。 XML编码 Java编码 我希望当我单击editText时,当前文本必须是dissapperar。但是当我单击 单击事件工作正常,但光标不再位于编辑文本处。这意味着如果要输入一些新文本,那么即使光标不在编辑文本,如何输入新文本,如果我使用 然后单击事件不起作用。但可用于任何新编辑。问题是什么?我知道这是个愚蠢的错误,但我不知道在哪里。提前感谢大家。

  • 问题内容: 我需要使用python编辑Excel工作簿。有没有这样做的方法,而无需阅读工作簿,编辑我想要的内容并将其写回?即有没有一种方法可以即时进行,因为我只需要在每张纸上编辑几个值? 我已经看过了,和,但他们似乎只支持(据我可以工作),阅读和写作不是编辑。我无法使用,因为我正在使用linux。 对库或特定的工作方式有何建议? 问题答案: xlutils有一个复制模块,可能会与您交错

  • vi 可以在命令行下编辑文件。 vi 要编辑的文件路径 练习:编辑文件 vi ninghao-project/README.md 这样会打开要编辑的文件,使用方向键可以移动光标。 编辑 想要编辑按一下小 i ,这样会进入到 vi 编辑器的编辑模式。这时你可以编辑文件里的内容,修改完成以后,按 esc 可以退出编辑模式。 搜索 搜索文件里的内容可以按 / ,然后输入要搜索的关键词,n 继续查找,

  • 我正在尝试使用Apache POI编辑包含数据的excel文件。我编写了以下代码: 当我运行代码时,当我尝试打开Excel文件时,会出现以下错误:“我们发现‘file.xlsx’中的某些内容有问题。您希望我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击是。” 如果我单击是,Excel确实会使用我指定的值进行更新;但是,我不希望出现此错误。我如何解决这个问题?

  • 我有问题,当我想在Laravel编辑我的个人资料。单击按钮update profile时出现以下错误: Symfony\Component\HttpKernel\Exception\MethodNotalLowedHttpException此路由不支持修补程序方法。支持的方法:GET、Head。http://127.0.0.1:8000/profile edit.blade.php web.php

  • 我试图在我的测试自动化框架中实现一个数据驱动的方面。我已经创建了一个fe函数,它似乎工作正常,可以检索参数的列/行数,从特定单元格获取数据,更新特定单元格等等。 我现在正在用一个基本上有2列的脚本进行测试。第一列是用户名,第二列是密码。我可以遍历这些行,列没有问题。 我遇到了一个问题,如果有一个空白单元格,它会崩溃,但我通过一些错误处理解决了这个问题,如果有一个黑色单元格,它会返回字符串“空单元格