网上很多关于NPOI关于加密的资源,都是关于单元格加密的,而不是对整个文件加密,今天弄了好久,终于找到解决方法了。
1.用excel新建一个文件作为模板,可以是空内容,在excel中对文件进行加密,如密码为:12345。
2.在NPOI读取前,调用:Biff8EncryptionKey.CurrentUserPassword = "12345";
3.在读取后调用:hssfworkbook.WriteProtectWorkbook("new Password", "user");
代码如下(注:我用的是1.2.5版本的):
1 string path = @"E:\test.xls";//刚用excel新建的模板文件 2 FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read); 3 Biff8EncryptionKey.CurrentUserPassword = "12345";//打开前调用 4 HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); 5 hssfworkbook.WriteProtectWorkbook("123456", "");//设置新密码 6 file.Close(); 7 ISheet sheet = hssfworkbook.GetSheetAt(0); 8 // 插入数据操作。。。 9 //保存文件 10 FileStream savefile = new FileStream(@"E:\test1.xls", FileMode.Create); 11 hssfworkbook.Write(savefile); 12 savefile.Close();
我试过不用模板,而直接新建workbook,然后设置密码,结果不管用,不知道什么原因,不过问题总算还是解决了。