0
嘿家伙我正在开发一个Swing应用程序,它将数据记录到一个受密码保护的Excel工作表中。如何使用Apache POI 3.14创建和编辑密码保护Excel表单?
我最初的问题是,我一直无法找到有关如何从头开始创建带有密码保护的Excel工作表的正确文档,而且我不完全确定Apache POI版本3.14是否支持它。任何有关此事的见解将不胜感激。
但是我真正的问题是,假设我已经有一个密码保护的.xlsx文件(通过在Excel本身手动设置密码),我可以通过WorkbookFactory.create(new FileInputStream(dataFile), "password");
访问文件,但是一旦代码执行完毕,文件不再受密码保护,现在任何人都可以访问它。
这里是我的代码的一个片段:
// Sheet 1
private void logSheet1(File dataFile) throws IOException, InvalidFormatException {
Workbook workBook = WorkbookFactory.create(new FileInputStream(dataFile), "password");
Sheet sheet1 = workBook.getSheet("Sheet 1");
Row row = sheet1.createRow(sheet1.getLastRowNum()+1);
// data
for(int i=0; i<log.length; i++) {
if(log[i] == null) log[i] = new String("No data");
Cell cell = row.createCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(log[i]);
}
FileOutputStream fos = new FileOutputStream(dataFile);
workBook.write(fos);
fos.close();
}
// Sheet 2
private void logSheet2(File dataFile) throws IOException, InvalidFormatException {
Workbook workBook = WorkbookFactory.create(new FileInputStream(dataFile), "password");
Sheet sheet2 = workBook.getSheet("Sheet 2");
Row row = sheet2.createRow(sheet2.getLastRowNum()+1);
// data
for(int i=0; i<log.length; i++) {
if(log[i] == null) log[i] = new String("No data");
Cell cell = row.createCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(log[i]);
}
FileOutputStream fos = new FileOutputStream(dataFile);
workBook.write(fos);
fos.close();
}
重复http://stackoverflow.com/questions/8817290/create-a-password-protected-excel-file-using-apache-poi的 – SomeDude
你似乎并没有包含的代码加密编写工作手册。当您[按照Apache POI文档使用密码加密OOXML文件](https://poi.apache.org/encryption.html#XML-based+formats+-+Encryption)时会发生什么,并添加额外的几个步骤? – Gagravarr
@Gagravarr更新我的代码后,我收到以下异常: 'org.apache.poi.openxml4j.exceptions.InvalidOperationException:无法打开指定文件:'data.xlsx'' 错误发生在我尝试(OPCDackage.open)(新文件(“data.xlsx”,PackageAccess.READ_WRITE);' –