JAVA POI 创建 Excel文件打开加密 并输出到输出流

来源:互联网 发布:淘宝二手货市场 编辑:程序博客网 时间:2024/05/22 11:36

这几天有一个需求,就是把数据导出成Excel,并且导出后打开需要输入密码,就像你把Excel文件手动设置一个打开权限

      ,然后我去百度搜索,因为我们的项目用的是POI ,然后百度上差不多文章都/wb.writeProtectWorkbook("123", "admin");这是方法,

可是当我惊喜的用的时候,发现只是个只读权限,我想既然有只读权限肯定有打开权限设置,然后我翻遍了百度,都是wb.writeProtectWorkbook

      方法,真是怒了。 后来发现有篇是用 其他的 一个需要收费的jar ,网上有破解版,他的实现很简单

下载 jxcell.jar

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 =wb.createSheet("sheet1");

Row row1=sheet1.createRow(0);
row1.createCell(0).setCellValue("aaaaa");
row1.createCell(1).setCellValue("bbbbb");
row1.createCell(2).setCellValue("ccccc");
row1.createCell(3).setCellValue("ddddd");

wb.write(bout);

FileOutputStream fileOut = new FileOutputStream("C:/aaa.xls");

// 设置密 码 保 护 ·

ByteArrayInputStream binput = new ByteArrayInputStream(bout.toByteArray());
 View m_view = new View();
 m_view.readXLSX(binput);
 m_view.write(fileOut,"
password");

fileOut.write(bout.toByteArray());




 几句代码就可以实现 导出

然后上面虽然可以实现,因为我们的项目jar是在Maven管理下,Maven的里面又没有这个jar,我们的私服由于各种原因,添加jar不好维护,

我强迫证就犯了,我觉得POI肯定是有打开加密的,后来我用谷歌去搜 , 谷歌一搜索,确实马上就受到我感觉是这个答案的文档, 可是具体很模糊,  因为搜索到的全是英文,对于

我这种0 英文基础的程序菜鸟,我只是把里面感觉核心的代码 ,复制下来试试  后来 有很多原因, 经过几个小时的奋战 ,发现 原来这个功能需要  poi  3.10.1 版本 poi-ooxml 3.10.1 版本

后来终于实现具体如下:

//创建工作薄
              XSSFWorkbook wb = new XSSFWorkbook();
              XSSFSheet sheet1 =wb.createSheet("sheet1");
              Row row1=sheet1.createRow(0);
              row1.createCell(0).setCellValue("aaaaa");
              row1.createCell(1).setCellValue("bbbbb");
              row1.createCell(2).setCellValue("ccccc");
              row1.createCell(3).setCellValue("ddddd");
              //把工作薄输出到字节里面
              ByteArrayOutputStream bout = new ByteArrayOutputStream();
              wb.write(bout);
              bout.flush();
              ByteArrayInputStream Workbookinput = new ByteArrayInputStream(bout.toByteArray());
              //创建POIFS文件系统  加密文件
              POIFSFileSystem fs = new POIFSFileSystem();
        EncryptionInfo info = new EncryptionInfo(fs, EncryptionMode.agile);
        Encryptor enc = info.getEncryptor();
        enc.confirmPassword("123456");
       //然后把字节输入到输入流,然后输入到OPC包里面
        OPCPackage opc = OPCPackage.open(Workbookinput);
        OutputStream os = enc.getDataStream(fs);
        opc.save(os);
        opc.close();

        FileOutputStream fos = new FileOutputStream("E:/test/excel1.xlsx");
        fs.writeFilesystem(fos);
        fos.close();

我把大概粘贴了下来,弄点代码的都会弄了

 写这篇菜鸟文章是感慨,现在百度出来的一些东西,真是太乱了,这些小的经验性的问题 ,大多是年代久远了,牛的人已经在换一种思维去解决问题了,直接官网看英文API了,也不会有我们这种菜鸟程序员的事了,

我希望作为我们这种初学的基础差的技术性 经验之谈 还是要制造点, 我们不能永远的是经验的获得者而不是制造者,不能怪百度,只能怪自己

0 0