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

原创 2016年08月30日 23:14:44

这几天有一个需求,就是把数据导出成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了,也不会有我们这种菜鸟程序员的事了,

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

java excel 导出,直接输出,不在项目内生成文件

大体一致,数据处理要随机应变,记得导入poi jar包。

java输出excel文件加密码保护问题

import java.io.File; import java.io.IOException; import jxl.SheetSettings; import jxl.Workbook; impo...

java对生成的Excl进行加密

package com.hthk.iisz.util; import java.io.File; import java.io.FileOutputStream; import java.io.Ou...

POI操作EXCEL,追加或覆盖数据,输入输出流注意事项,jar包的选择

对于获得行数据,有两种方法createRow和getRow。顾名思义,前者是新建行,后者是获得行。createRow是不管原来这一行原来是不是有原始数据,都会新建一行。getRow是获得原始行数据,如...

Java试题-7:文件字节输出流

  • 2015年06月08日 13:21
  • 12KB
  • 下载

java输入输出流与文件处理

  • 2012年07月05日 15:12
  • 198KB
  • 下载

Java 创建文件输出流的时候报错

问题:在项目中我们用Apache的Mahout进行协同过滤的推荐,需要打开一个csv文件并将数据库里的用户数据存入其中,从而进行书籍推荐。但是在创建文件输出流的时候却捕获到了一个异常- -·packa...

java poi 读取有密码加密的Excel文件

import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil; imp...

Java-IO框架-文件输入输出流

数据流 BufferedReader BufferedWriter FileOutputStream FileInputStream InputStreamReader OutputStreamWr...
  • tsoTeo
  • tsoTeo
  • 2017年06月27日 20:24
  • 137
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA POI 创建 Excel文件打开加密 并输出到输出流
举报原因:
原因补充:

(最多只允许输入30个字)