У меня есть метод, чтобы создать и написать .xlsx файл, который работает отлично:апача пои: не может вновь открыть книгу: InvalidOperationException
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));
Любая идея, как это исправить/способ вновь открыть книгу, которая была написана/использовался ранее в той же программе?
Хотя вы закроете книгу в программе Java, вы, возможно, процесс первенствовать все еще работает на вашем компьютере, который будет DISALLOW другой процесс нить будет запущен, если вам попытайтесь снова открыть книгу. Может потребоваться руководство 'taskkill/pid' – andrewdleach
Вы пробовали WorkbookFactory? WorkbookFactory.create (новый FileInputStream (f)) – andrucz
@andrucz да пробовал это, тот же результат ... – neza