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);' –