2016-11-30 5 views
0

У меня есть программа, которая генерирует отчеты с большим количеством данных. Я получил правильные работы, используя Apache POI SXSSF для создания файла xlsx. http://poi.apache.org/spreadsheet/index.htmlКак защитить книгу Excel через SXSSF?

Дело в том, что я не мог найти в их документации, как защитить паролем УПРАЖНЕНИЯ ВСЮ. Я хочу, чтобы, если кто-то пытается открыть файл, ему нужно ввести пароль, чтобы просмотреть данные.

Имейте в виду, что это отличается от защиты паролем одного рабочего листа, где они все еще могут открывать файл и просматривать данные, но имеют доступ только для чтения.

я не нашел ничего, в документации SXSSFWorkbook: https://poi.apache.org/apidocs/org/apache/poi/xssf/streaming/SXSSFWorkbook.html

Похоже, есть метод для XSSFWorkbook называется setWorkbookPassword но не существует для SXSSF и не работал на SXSSFWorkbook. https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html#setWorkbookPassword(java.lang.String,%20org.apache.poi.poifs.crypt.HashAlgorithm)

Кто-нибудь знает, как это можно сделать? Также будут рассмотрены альтернативные обходные пути.

Заранее спасибо.

UPDATE

Я думал, может быть, с помощью макросов позволило книгу с скриптом на защитить его паролем, как предложено здесь. Java Apache Poi SXSSF with Excel Macros

И я использовал код VBA отсюда, чтобы сделать это: http://analysistabs.com/excel-vba/protect-unprotect-workbook/, а затем использовать этот файл в качестве шаблона при создании файла Excel, но пока я играл с макросом, оказалось, что этого недостаточно. Некоторые настройки компьютерной безопасности установлены на «Высокий» и будут отключать макросы, поэтому, когда я открываю файл, я получил приглашение для пароля, но затем у меня также появилось предупреждающее сообщение о том, что макросы отключены, и я смог просмотреть книгу содержание.

Любые предложения?

ответ

3

«... Я не смог найти в их документации, как защитить паролем ...» ???

Вы видели это меню ввода "Encryption support" в меню слева на главной странице poi?

запросить приглашение на ввод пароля при открытии (т.е. чтение) файл, вам необходимо зашифровать - см "XML-based formats - Encryption"

и, как StackOverflow любит, чтобы все было в одном месте - вот код:

// create a new POIFSFileSystem, which is the container for 
// encrypted OOXML-based files 
POIFSFileSystem fs = new POIFSFileSystem(); 
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile); 

// setup the encryption 
Encryptor enc = info.getEncryptor(); 
enc.confirmPassword("foobaa"); 

// after writing to the SXSSF workbook you need the content 
// as a stream 
InputStream is = <open the SXSSF workbook as stream> 
OutputStream os = enc.getDataStream(fs); 
// copy the stream to the OutputStream 
IOUtils.copy(is, os); 

// Write out the encrypted version 
FileOutputStream fos = new FileOutputStream("..."); 
fs.writeFilesystem(fos); 
fos.close(); 
+0

Ahh Я думаю, что я был настолько сосредоточен на поиске ключевых слов, как «пароль» или «защита», что страница «шифрование» не появилась. Спасибо за это! Это именно то, что мне нужно. – yaki33