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

如何使用POI Java在同一个工作簿中添加多个工作表?

商同
2023-03-14
public void createReportFile(MultiValueMap MMReport) {
        try {
            workBook = new XSSFWorkbook();
            sheet = workBook.createSheet("REPTRANS_TRN" + count);

            AtomicInteger rowCounter = new AtomicInteger();
            MMReport.forEach((k, v) -> {
                AtomicInteger cellCounter = new AtomicInteger();
                Row row = sheet.createRow(rowCounter.incrementAndGet());
                row.createCell(cellCounter.getAndIncrement()).setCellValue(k.toString());

                List<String> values = (List<String>) v;
                values.forEach(value -> {
                    row.createCell(cellCounter.getAndIncrement()).setCellValue(value.toString());
                });
            });
            fileOutput = new FileOutputStream(getReportFile());
            workBook.write(fileOutput);
            fileOutput.flush();
            fileOutput.close();
            ++count;
        } catch (Exception e) {
            System.out.println(e);
        }
    }

方法创建新文件

 public File getReportFile() throws IOException {
        File buildFileFolder;

        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
        Date date = new Date();

        String rootDirectory = "Reports";       //main_folder_name
        String dailyFolderName = dateFormat.format(date);       //Daily folder name

        File dailyFileFolder = new File(rootDirectory + "/" + dailyFolderName);
        if (!dailyFileFolder.exists()) {
            dailyFileFolder.mkdirs();
            POIforgfgWrite.resetCounterValue("buildcounter");
            buildNumber = 1;
        }

        String buildFileName = "RentRun-Build-" + buildNumber;
        buildFileFolder = new File(rootDirectory + "/" + dailyFolderName + "/" + buildFileName + ".xlsx");
        if (!buildFileFolder.exists()) {
            buildFileFolder.createNewFile();
            POIforgfgWrite.writeBackCounterValue("buildcounter", buildNumber);
        }
        return buildFileFolder;
    }

共有1个答案

浦毅
2023-03-14

您的createreportfile()方法创建一个新的工作簿实例,在其中创建一个工作表,向其中写入数据,然后关闭并使用name+counter保存工作表。每次调用CreateReportFile时,都会创建一个新的单张工作簿。

counter变量似乎来自类作用域,这可能是您希望工作簿实例成为的对象。还应在关闭工作簿的同一范围内打开工作簿。

我建议您创建一个updateReportFile()方法,该方法接收预先获得的工作簿实例和要写入的数据。对于工作簿,您应该提供希望更新/创建的OutputStream-object(假设它存在,否则创建一个新的)。

 类似资料:
  • 我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工

  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我正试图将所有工作表(7张)从workbook1(wb1)复制到WB2。wb1包含命令按钮,但我不希望它们出现在我的新工作簿中。我正在使用循环将单个工作表从一个工作簿复制到另一个工作簿。但是复制到第二张时出错了。我使用的代码如下:- 循环第一次成功运行,但对于i=2,代码给出错误

  • 问题内容: 我有一个较大的电子表格文件(.xlsx),正在使用python pandas处理。碰巧我需要那个大文件中两个标签中的数据。其中一个标签包含大量数据,另一个标签仅包含几个方形单元格。 当我在 任何 工作表上使用pd.read_excel()时,在我看来整个文件都已加载(不仅仅是我感兴趣的工作表)。因此,当我两次使用该方法(每张纸一次)时,我实际上不得不使整个工作簿被读两次(即使我们仅使用

  • 我对宏是新手,需要帮助。我在一个文件夹中有几个工作簿,每个工作簿有四个工作表。现在我想要一个mocro它复制数据从每个工作簿(工作表明智)和过去在我的主工作簿(工作表明智)意味着数据1应该被粘贴一个在另一个下面在我的主工作簿在工作表1和工作表2分别。*工作簿名称可以是文件夹中的任何东西。有人能帮我完成整个代码吗?我有宏从一张表到我分配的表的数据,但它复制粘贴数据从打开的表,而不是按表名明智的。有人

  • 然后另一个问题是工作簿的名称都不同,所有300个。是否有一个宏可以复制我打开的工作簿,而不是每次都输入实际的名称?