我的Excel 是加密的,怎样用poi,读取这个文件呢?或使用java解密Excel文件.
如果你的 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(); } } } } }
|