【问题标题】:Password protected xls/xlsx file in javajava中受密码保护的xls/xlsx文件
【发布时间】:2012-06-23 14:40:33
【问题描述】:

我在http://java.sys-con.com/node/1258827 的帮助下创建了带有 xls 文件的受密码保护的 zip 文件。

我的问题是,是否有任何 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 文件上设置密码?

编辑2: 我试过 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");

但它没有设置任何密码

【问题讨论】:

标签: java xls xlsx jxl jexcelapi


【解决方案1】:

我个人使用过JExcelApi,但我不记得在其中看到过有关密码保护的内容。就JExcelApi 而言,有许多功能的答案是“否”:

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

我个人认为,如果密码保护是可能的(使用开源 api) 它们将是互联网上可用的大量教程,您可以通过快速的 Google 搜索来搜索它们,不幸的是,免费提供的 Java 电子表格 API 似乎都不支持编写加密的电子表格。

但是,如果您愿意使用商业 api/库,请参阅this

【讨论】:

    【解决方案2】:

    您可以使用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();
     }
    
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2018-10-01
      • 2019-12-03
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多