2012-06-23 244 views
2

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

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

编辑: 我得到这个
HSSFSheet.protectSheet("xyz");但它只是使表只读。

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

编辑1: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");

但它不设置任何密码

+1

我没有得到我的答案。 – happy

+0

POI无法执行此操作:http://apache-poi.1045710.n5.nabble.com/Excel-file-protection-using-Apache-POI-td5131471.html使用其中一个答案中提到的Java库链接可能的重复。 – orangepips

回答

2

我个人使用JExcelApi,但我不记得看过一些关于密码保护进去。至于JExcelApi关注也有一些地方的答案被称为是“否”的特点:

  • 透视表
  • 下拉列表
  • 在细胞内含有丰富的文本
  • 重复设置的行
  • 密码保护

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

但是如果你愿意使用商业API /库,然后看到this

0

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

}