2012-06-23 242 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(); 
} 

}