Hey Leute, ich arbeite an einer Swing-Anwendung, die Daten auf einem passwortgeschützten Excel-Blatt protokolliert.Wie erstellt und bearbeitet man ein Passwortschutz-Excel-Blatt mit Apache POI 3.14?
Mein anfängliches Problem ist, dass ich nicht in der Lage war, richtige Dokumentation zu finden, wie man die Excel-Tabelle mit Passwortschutz von Grund auf erstellt, und ich bin nicht ganz sicher, ob es sogar von Apache POI Version 3.14 unterstützt wird. Jeder Einblick in die Sache würde sehr geschätzt werden.
Allerdings ist mein echtes Problem, dass vorausgesetzt, ich habe bereits eine passwortgeschützte .xlsx Datei (durch manuelle Einstellung des Passworts aus Excel selbst), konnte ich auf die Datei über WorkbookFactory.create(new FileInputStream(dataFile), "password");
zugreifen, aber sobald der Code ausgeführt hat, die Datei war nicht mehr passwortgeschützt und jetzt kann jeder darauf zugreifen.
Hier ist ein Ausschnitt aus dem Code, den ich habe:
// 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();
}
Duplizieren von http://stackoverflow.com/questions/8817290/create-a-password-protected-excel-file-using-apache-poi – SomeDude
Sie scheinen den Code nicht enthalten haben zu verschlüsseln die Arbeitsmappe zum Schreiben. Was passiert, wenn Sie [die Apache POI-Dokumentation zum Verschlüsseln von OOXML-Dateien mit einem Kennwort befolgen] (https://poi.apache.org/encryption.html#XML-based+formats+-+Encryption) und die zusätzlichen paar Schritte hinzufügen? – Gagravarr
@Gagravarr nach der Aktualisierung meines Codes, bekomme ich die folgende Ausnahme: 'org.apache.poi.openxml4j.exceptions.InvalidOperationException: Kann die angegebene Datei nicht öffnen: 'data.xlsx'' Der Fehler tritt auf, wenn ich es versuche "OPCPackage" als solches zu instanziieren: 'OPCPackage opc = OPCPackage.open (neue Datei (" data.xlsx ", PackageAccess.READ_WRITE);' –