读完同一个excel文件后写错误 - java poi

时间:2017-02-09 13:46:41

标签: java excel apache-poi

我在两天内陷入了这个问题并没有取得任何突破。我将Java 8和Apache POI用于所有与excel相关的工作。 基本上,该过程如下图所示:

enter image description here

我想“编辑或追加”现有工作表的值,而不是覆盖它。考虑到上图有4个阶段,我使用的一些代码是:

第二阶段(B):将文件从file_x.xlsx写入file_a.xlsx

try{

    public FileOutputStream out = new FileOutputStream(new File("c://file_path_file_a.xlsx"));
    public XSSFWorkbook newWorkbook = new XSSFWorkbook();
    public XSSFSheet sheet = newWorkbook.createSheet("vertical");


                for(String key : map_data.keySet()){
                    List<String> values = map_data.get(key);

                    // for values in each key, store it in sheet
                    for (String value:values){

                    // make instance of new row that will print data 
                    // simultaneously in two columns
                        Row newRow = sheet.createRow(row);

                        newRow.createCell(0).setCellValue(key); // 1st column
                        newRow.createCell(6).setCellValue(value); // 6th column

                        row++;
                        }

                }

                // write the contents of workbook into the excel file
                newWorkbook.write(out);

                // close all the respective files and workbooks
                out.close();
                newWorkbook.close();

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

此阶段正确完成工作,我在file_a.xlsx中得到了我想要的输出。

现在是我失败的棘手部分。图中的第4阶段显示它想要从file_y.xlsx读取数据并将值附加到现有file_a.xlsx

它不想覆盖任何内容,只想在现有的excel文件中再添加一列。但我无法对此进行编码,因为在这里和下面给出的代码失败时无法想到任何好的解决方案。

第4阶段(D):将文件从file_y.xlsx写入file_a.xlsx

try {

      public FileOutputStream output_excel_file = new FileOutputStream(new  File("c://file_path_file_a.xlsx"));
      public XSSFWorkbook workbook = new XSSFWorkbook();
      public XSSFSheet sheet = workbook.getSheet("vertical");


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

                if (error_text.contains(1st_col.get(i))) {

                    int index = error_text.indexOf(1st_col.get(i));
                    String value = dsps.get(index);

                    Row row = sheet.createRow(i);
                    row.createCell(12).setCellValue(value); // append values to 12th column


                }

            } // for loop

            output_excel_file.close();
            workbook.close();


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

因此D阶段的代码失败,算法就停在那里。

我尝试了什么:

除了上面的代码之外,我试图阅读堆栈溢出中提到的同一问题的多个答案,但我无法理解它将如何解决我的问题因为我将编写输出excel文件2次或者可能是将来会更多。此外,一切都应该在一次执行中发生。因此,在class 1完成工作后,class 2将开始,依此类推。

我必须阅读以前的数据并从其他参考文件中追加更多数据。我觉得有点迷失在这一点上。

感谢您的时间。

P.S: 我还在阶段B和阶段C之间的某处读取输出文件,以获得arraylist中的一些值。我只是存储输出excel文件中的一些主要生成键。

0 个答案:

没有答案