密码保护的java中的xls / xlsx文件

我已经在http://java.sys-con.com/node/1258827的帮助下创建了受密码保护的zip文件,其中包含xls文件。

我的问题是,是否有任何java api将创建密码保护的xls文件而不是zip文件。 我想直接在xls文件上应用密码。加密/解密是一个选项,但想要在双击文件时提示。

编辑:我知道了
HSSFSheet.protectSheet("xyz"); 但它只使表格只读。

即使我已经尝试过这个hssfworkbook.writeProtectWorkbook("abc", "abc"); 但它没有提示输入密码。

Edit1: org.apache.poi.hssf.record.crypto.Biff8EncryptionKey包中有方法打开密码保护的excel文件org.apache.poi.hssf.record.crypto.Biff8EncryptionKey.setCurrentUserPassword(password); 是否有任何方法可以在不受保护的Excel文件上设置密码?

Edit2:我尝试过JExcel API

Workbook w=Workbook.getWorkbook(new File("c:\\employees22533.xls"));
Sheet ws=null;
ws=w.getSheet("Employee List");
SheetSettings sh=ws.getSettings();
sh.setPassword("abc");

但它没有设置任何密码

我个人使用过JExcelApi但我不记得曾经看过有关密码保护的内容。 就JExcelApi而言,有许多function,其答案被称为“否”:

  • 数据透视表
  • 下拉列表
  • 单元格中的富文本
  • 设置重复行
  • 密码保护

我个人认为,如果密码保护已经成为可能(使用开源API)他们会在互联网上提供大量的教程,你可以通过快速谷歌搜索来搜索它们,不幸的是,没有一个免费提供的Java电子表格API似乎支持编写加密的电子表格。

但是,如果您愿意使用商业API /库,那么请看这个

您可以使用JACOB来完成 。 这是没有保护temp.xsl文件到受保护的temptest.xsl文件的代码。 您需要在类路径中包含jacob.jar和jacob-XX-XX.dll

 package test; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class excel { private ActiveXComponent excelApp = null; public excel() { String xlsFile = "D:\\temp.xls"; excelApp = new ActiveXComponent("Excel.Application"); excelApp.setProperty("Visible", new Variant(false)); Object workbooks = excelApp.getProperty("Workbooks").toDispatch(); Object workbook = Dispatch.invoke((Dispatch) workbooks,"Open",Dispatch.Method,new Object[] {xlsFile, new Variant(false),new Variant(true) }, new int[1]).toDispatch(); Dispatch.call((Dispatch)workbook, "SaveAs", new Variant("D:\\temptest.xls"),new Variant("1"),new Variant ("pass")); excelApp.invoke("Quit", new Variant[] {}); } public static void main(String arg[]) { System.out.println("hello"); new excel(); } }