Как сохранить файл excel с помощью apache-poi - PullRequest
0 голосов
/ 08 апреля 2019

Используя java, я читаю строковые значения данных, разделенные запятой, а затем записываю в шаблон файла Excel, предоставленный на веб-портале, с помощью библиотеки apache poi. В тот момент, когда я пытаюсь загрузить отредактированный файл Excel, я получаю сообщение об ошибке в неверном формате; однако, когда я открываю файл вручную, нажимаю Ctrl + S (сохраняю) и загружаю файл, он успешно загружается.

public static void setData(String dataValues, String path) {
        Workbook workbook;
        try {
            File excelExportFile = new File(path);
            workbook = WorkbookFactory.create(excelExportFile);
            Sheet sheet = workbook.getSheetAt(0);
            int nextRow = sheet.getLastRowNum()+1;
            Row row = sheet.getRow(nextRow);
            row = sheet.createRow(nextRow);
            int cellnum=0;
            List<String> items = Arrays.asList(dataValues.split("\\s*,\\s*"));
            Iterator<String> it = items.iterator();
            while(it.hasNext()) {
                String value = it.next();
                String regex = "([0-9]|1[012])\\/([0-9]|[12][0-9]|[3][01])\\/(19|20)\\d\\d";
                Matcher matcher = Pattern.compile(regex).matcher(value);
                if (matcher.find()) {
                    CellStyle cellStyle = workbook.createCellStyle();
                    CreationHelper createHelper = workbook.getCreationHelper();
                    cellStyle.setDataFormat(
                        createHelper.createDataFormat().getFormat("m/d/yyyy"));
                    Cell cell = row.createCell(cellnum);
                    cell.setCellValue(value);
                    cell.setCellStyle(cellStyle);
                }
                else {
                    Cell cell = row.createCell(cellnum);
                    cell.setCellValue(value);
                }
                cellnum++;
            }
            try (FileOutputStream fileOut = new FileOutputStream(path + ".new")) {
                workbook.write(fileOut);
                fileOut.close();
            }
            workbook.close();
            FileUtilities fileUtil = new FileUtilities();
            fileUtil.deleteFile(path+ ".new");

        }catch (EncryptedDocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Я ожидаю, что после выполнения этого кода файл должен быть успешно загружен. На самом деле, мне нужно открыть файл вручную, нажать (Ctrl + S) сохранить, и он загружается.

...