apache poi: невозможно открыть книгу: InvalidOperationException

У меня есть метод для создания и записи файла .xlsx, который отлично работает:

public static void createFileAndwriteResult(String path) { f = new File(path); try { f.createNewFile(); } catch (IOException e1) { Message.showMessage("", "Permission to result folder denied", false); } FileOutputStream fos = null; try { fos = new FileOutputStream(f); XSSFWorkbook wb = new XSSFWorkbook(); Sheet resultSheet = wb.createSheet(); //do stuff wb.write(fos); wb.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } 

И еще один способ добавить материал к этому .xlsx:

 public static void appendToFile() { File f = new File(path); XSSFWorkbook wb = null; Sheet resultSheet = null; FileOutputStream fos = null; try { fos = new FileOutputStream(f); try { wb = new XSSFWorkbook(new FileInputStream(f)); // <--- This is where the exception happens resultSheet = wb.getSheetAt(0); //do stuff } catch (Exception e) { // TODO Auto-generated catch block e1.printStackTrace(); } } } 

Однако, если я хочу повторно открыть эту книгу, я получаю InvalidOperationException, говорящий: «Не удается открыть указанный файл:« PathToFile \ file.xlsx ». Файл существует в этой папке. Однако при этом исключается размер 0kB. Я пробовал разные методы, в том числе:

 OPCPackage pkg = OPCPackage.open(f); wb = new XSSFWorkbook(pkg); 

а также:

 Workbook wb = WorkbookFactory.create(new File(f)); 

Любая идея, как исправить это / способ открыть книгу, которая была написана / использована ранее в одной программе?

fos = new FileOutputStream(f); создать выходной поток с опцией «добавить» равным false. Таким образом, контент очищается.

Вы должны определить true для append аргумента:

 fos = new FileOutputStream(f, true); 

Вы пытаетесь открыть файл для чтения, который вы уже открыли для записи, – это не сработает. Оба раза вы ссылаетесь на файл f

 //You open an OUTPUT stream into File f here fos = new FileOutputStream(f); try { //And here you try to read again wb = new XSSFWorkbook(new FileInputStream(f)); 

Вы можете создать новый файл для вывода и позже заменить «старый» вход «новым» выходным файлом.

  • Selenium Webdriver - Java - Исключение при попытке записи данных в Excel с использованием Apache POI
  • Java-библиотека с открытым исходным кодом для создания сводной таблицы из excel
  • Хранение данных в коллекции Java из файла Excel
  • Файл Excel .xlsx не открывается после загрузки файла с сервера в java
  • Есть ли библиотека Java с открытым исходным кодом для разбора файлов Excel 2007?
  • Чтение данных из xlsx (Excel) Данные файла не отображаются
  • Проблема Excell Cell Style
  • Как создать сводную таблицу с использованием Apache POI с использованием набора данных LARGE
  • как перезаписать строки и столбцы в excel с использованием HSSF
  • Работа с файлами Excel
  • Преобразование XML-файла Excel 2003 в формат Excel 2003 XLS
  • Давайте будем гением компьютера.