当前位置: 代码迷 >> Java Web开发 >> java poi 打开加密 excel?该怎么处理
  详细解决方案

java poi 打开加密 excel?该怎么处理

热度:685   发布时间:2016-04-16 21:54:04.0
java poi 打开加密 excel?
本帖最后由 lujianwen 于 2014-09-22 18:26:38 编辑
我的Excel 是加密的,怎样用poi,读取这个文件呢?或使用java解密Excel文件.
------解决思路----------------------
本帖最后由 defonds 于 2014-09-24 12:46:20 编辑
参考 http://poi.apache.org/encryption.html。如果你的 Apache POI 是 3.8 以后的版本,就可以直接用它对加密的 xls/xlsx 文件进行解密了(当然密码还是要你自己提供)。
但是目前,你还是不能使用 POI 写加密的 excel 文件,只能写没加密的。

这里有个小例子,它读取了一个加密的 excel 文件,使用你自己提供的密码将其解密,然后将其写出为一个未加密的 excel 文件。你可以参考一下:
    public static void readProtectedBinFile() {
    try {

        InputStream inp = new FileInputStream("c:\\tmp\\protectedFile.xls");
        org.apache.poi.hssf.record.crypto.Biff8EncryptionKey.setCurrentUserPassword("abracadabra"); 

        Workbook wb;
        wb = WorkbookFactory.create(inp);

        // Write the output to a file
        FileOutputStream fileOut;
        fileOut = new FileOutputStream("c:\\tmp\\unprotectedworkbook.xlsx");
        wb.write(fileOut);
        fileOut.close();
    } catch (InvalidFormatException e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

------解决思路----------------------
需要用到poi。
加密用到
HSSFWorkbook的writeProtectWorkbook方法。
具体实现如下:
 
 
package excel;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
public class Writer {
 public static final String FILE = "./workbook.xls";
 
 public static void main(String[] args) {
  FileOutputStream fileOut = null;
  try {
   // 创 建一个工作薄
   HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(FILE));
   // 设置密 码 保 护 ·
   wb.writeProtectWorkbook("password", "owner");
   // 写入excel文件
   fileOut = new FileOutputStream(FILE);
   wb.write(fileOut);
   fileOut.close();
  } catch (IOException io) {
   io.printStackTrace();
  } finally {
   if (fileOut != null) {
    try {
     fileOut.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
 
 }
 
}
楼主的问题不太会 我也是搜到的 你看看能用不
  相关解决方案