vik*_*iii 13 java excel xls apache-poi
我正在开发一个简单的Java程序来使用(Apache POI)API创建一个Excel文件.我使用Oracle 10g作为数据库并使用ojdbc14 JAR文件.
我有一个名为USERINFO表,有三列,即USERNAME,PASSWORD和NAME.
现在使用Apache POI,我已经能够把所有的行中的Excel文件.
由于该文件包含敏感数据,如用户名和密码,我想让它受密码保护.在论坛上,我发现了如何读取受密码保护的文件,而不是如何创建它们.那我怎么能做到这一点?
Sam*_*nes 15
更新:从版本3.10开始,POI支持XLSX文件的加密和解密.请参阅POI网站上的"加密支持"页面.以下内容仍与XLS二进制工作簿相关.
根据POI网站上的"加密支持"页面, POI支持读取加密的XLS和XLSX文件.该页面上未提及加密,这意味着它不受支持.这通过在POI站点搜索"加密"来备份,该加密仅返回少数几个关于解密的结果.我还看了一下他们的加密实现的来源,它似乎只处理解密.这并不奇怪; POI专为数据提取和搜索索引而设计,而不是用于创建新的电子表格.
正如其他人所建议的那样,通常可以通过在Excel中创建模板然后使用POI用数据填充它来解决POI中缺少的功能.遗憾的是,这对加密不起作用,因为加密电子表格的文件格式完全不同.
如果您愿意为商业软件付费,最新版本的ExtenXLS对Excel支持的所有加密格式都提供完全读写支持.只需构建一个EncryptedWorkBookHandle而不是正常的WorkBookHandle.这将使用未经修改的JRE支持的最强密码,用于XLS的RC4和用于XLSX的128位AES.如果您想在OOXML中使用256位AES,并且已经安装了JCE无限制策略,则可以使用MSOfficeEncrypter该类.
JExcelAPI是一种流行的开源Java电子表格API,似乎根本不支持加密.Aspose.Cells是一种商业产品,支持强加密.Actuate e.Spreadsheet的文档似乎已经从'net中消失了,所以我不知道它是否支持加密.
由于没有一个免费提供的Java电子表格API似乎支持编写加密电子表格,如果您不愿意使用商业软件,则需要提出一种解决方法.例如,您可以将电子表格写入加密的ZIP文件中.java.util.zip不支持加密,但它看起来像Zip4j.
完全披露:我在ExtenXLS公司的Extentech公司工作.
创建受密码保护的Excel文件或使用现有模板并使其受密码保护.这将为用户提供"只读"访问权限.这是一个例子,我有一个密码为"秘密"的Excel文件:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
public class ProtectedExcelFile {
public static void main(final String... args) throws Exception {
String fname = "C:\\Documents and Settings\\sadutta\\Desktop\\sample.xls";
FileInputStream fileInput = null;
BufferedInputStream bufferInput = null;
POIFSFileSystem poiFileSystem = null;
FileOutputStream fileOut = null;
try {
fileInput = new FileInputStream(fname);
bufferInput = new BufferedInputStream(fileInput);
poiFileSystem = new POIFSFileSystem(bufferInput);
Biff8EncryptionKey.setCurrentUserPassword("secret");
HSSFWorkbook workbook = new HSSFWorkbook(poiFileSystem, true);
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue("THIS WORKS!");
fileOut = new FileOutputStream(fname);
workbook.writeProtectWorkbook(Biff8EncryptionKey.getCurrentUserPassword(), "");
workbook.write(fileOut);
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
finally {
try {
bufferInput.close();
}
catch (IOException ex) {
System.out.println(ex.getMessage());
}
try {
fileOut.close();
}
catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您应该能够编写或修改现有模板的方式相同.完成后,覆盖模板.如果您的模板应该多次使用,您可能希望将模板复制到其他位置,然后使用代码进行修改.
| 归档时间: |
|
| 查看次数: |
30794 次 |
| 最近记录: |