Apache POI для сохранения предопределенных макросов после редактирования - PullRequest
0 голосов
/ 05 июня 2019

У меня есть XLSX и XLSM файлы, которые содержат некоторые предопределенные макросы. Я пытаюсь использовать Apache POI для редактирования этих файлов, но макросы удаляются автоматически. Когда я пытаюсь открыть файл после изменения, появляется окно с уведомлением, что файлы удалены, потому что файл поврежден:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <logFileName>error066080_01.xml</logFileName>
    <summary>Error in file (C:\_privat\completeReport.xlsm)</summary>
    <removedRecords>
        <removedRecord>/xl/worksheets/sheet1.xml</removedRecord>
        <removedRecord>/xl/calcChain.xml</removedRecord>
    </removedRecords>
</recoveryLog>

Я использую следующий код для обработки fle, Vars.XLS содержит путь к файлу XLSX/XLSM.

File file = new File(Vars.XLS);
FileInputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = XSSFWorkbookFactory.createWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFRow row = sheet.createRow(recordcount+4);
Cell cell;

cell = row.createCell(0);
cell.setCellValue(recordcount);

inputStream.close();
FileOutputStream fileOut=new FileOutputStream(Vars.XLS);
workbook.write(fileOut);
fileOut.close();

1 Ответ

1 голос
/ 05 июня 2019

Вы пытаетесь обновить лист Excel.В случае обновления вы не должны создавать строку или ячейку, скорее вы должны прочитать ячейку.Ниже приведен фрагмент кода, который вы можете попробовать.

XSSFRow row = sheet.getRow(some number);
Cell cell = row.getCell(some number);
cell.setCellValue(recordcount);
...