Проблемы с записью в файл Excel (Apache POI) - PullRequest
0 голосов
/ 03 сентября 2018
public static String already_exists(ArrayList<String> reg_id, ArrayList<String> doc_id, ArrayList<String> status) throws RowsExceededException, WriteException, IOException{
         WritableWorkbook myFirstWbook = null;
         FileOutputStream out = new FileOutputStream(new File("C://Users//Desktop//OP_demo.xlsx"));
                XSSFWorkbook workbook = new XSSFWorkbook();
                 XSSFSheet sheet = workbook.createSheet("Java Books");

                 int rowCount = 0;
                 int columnCount = 0;
                 for(int i=0;i<reg_id.size();i++)
                    {
                      Object[][] bookData={{reg_id.get(i),doc_id.get(i),status.get(i)}};
                      Row row = sheet.createRow(rowCount++); 
                      //System.out.println(reg_id.get(i)+doc_id.get(i)+status.get(i));
                      for (Object[] aBook : bookData) 
                        {

                         for (Object field : aBook) 
                            {
                             org.apache.poi.ss.usermodel.Cell cell = row.createCell(columnCount++);

                                {
                                 cell.setCellValue(field.toString());
                                }

                            }
                         workbook.write(out);


                      }


                 }

                 out.close();  

        return "";
    }

Выше приведен фрагмент кода, который я использовал для записи в файл Excel 'OP_Demo'. Значения массивов reg_id, doc_id и status должны использоваться для заполнения ячеек. Однако, когда я запускаю программу, только значения списков в позиции индекса 0 записываются в файлы. Я не поместил конкретное утверждение в цикле for?

1 Ответ

0 голосов
/ 03 сентября 2018

Вам нужно переместить workbook.write (out); за пределы цикла. workbook.write (уходит); записывает содержимое рабочей книги в файловый поток, и вам нужно будет записать в файл, как только все записи будут обработаны, иначе содержимое файла будет перезаписано при каждом выполнении.

public static String already_exists(ArrayList<String> reg_id, ArrayList<String> doc_id, ArrayList<String> status) throws RowsExceededException, WriteException, IOException{
             WritableWorkbook myFirstWbook = null;
             FileOutputStream out = new FileOutputStream(new File("C://Users//Desktop//OP_demo.xlsx"));
                    XSSFWorkbook workbook = new XSSFWorkbook();
                     XSSFSheet sheet = workbook.createSheet("Java Books");

                     int rowCount = 0;
                     int columnCount = 0;
                     for(int i=0;i<reg_id.size();i++)
                        {
                          Object[][] bookData={{reg_id.get(i),doc_id.get(i),status.get(i)}};
                          Row row = sheet.createRow(rowCount++); 
                          //System.out.println(reg_id.get(i)+doc_id.get(i)+status.get(i));
                          for (Object[] aBook : bookData) 
                            {

                             for (Object field : aBook) 
                                {
                                 org.apache.poi.ss.usermodel.Cell cell = row.createCell(columnCount++);

                                    {
                                     cell.setCellValue(field.toString());
                                    }

                                }

                          }

                     }

                     workbook.write(out); // writing the workbook to file-stream outside loop
                     out.close();  

            return "";
        }

Вы можете обратиться по следующей ссылке: https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/ Он показывает базовый пример для чтения и записи файла Excel с использованием Apache POI.

...