Java 加密/解密Excel
概述
设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码;或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑。另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源。无需设置文档保护时,可撤销密码保护,即解密文档。下面,将通过java程序演示以上加密、解密方法的实现。
示例大纲
1. Excel工作簿
1.1 加密工作簿
1.2 解密工作簿
2. Excel工作表
2.1 加密工作表
2.2 加密工作表指定数据范围
2.3 设置工作表公式不可见
2.4解密Excel工作表
工具
工具:Free Spire.XLS for Java (免费版)
注1: 可通过官网下载jar包,并解压将lib文件夹中的jar文件导入java程序;或者通过maven仓库下载安装导入。

注2:这里设置工作表保护时,可支持多种不同类型的保护(如下图),本文示例以选择其中一种为例。

Java代码示例
【示例1】加密工作簿
import com.spire.xls.*;
public class ProtectWb {
public static void main(String[] args) {
//加载测试文档
Workbook wb = new Workbook();
wb.loadFromFile("sample.xlsx");
//使用密码加密工作簿
wb.protect("123456");
//保存文档
wb.saveToFile("ProtectWorkbook.xlsx", ExcelVersion.Version2010);
wb.dispose();
}
}
工作簿加密结果:

【示例2】解密工作簿
import com.spire.xls.*;
public class UnprotectWb {
public static void main(String[] args) {
//加载文档
Workbook wb = new Workbook();
wb.setOpenPassword("123456");//源文档密码
wb.loadFromFile("ProtectWorkbook.xlsx");
//解除密码保护
wb.unProtect();
//保存文档
wb.saveToFile("UnprotectWb.xlsx");
wb.dispose();
}
}
运行程序,生成的工作簿文件将不再有密码保护。
【示例3】加密工作表
import com.spire.xls.*;
import java.util.EnumSet;
public class ProtectSheet {
public static void main(String[] args) {
//加载测试文档
Workbook wb = new Workbook();
wb.loadFromFile("sample.xlsx");
//获取第一个工作表
Worksheet sheet = wb.getWorksheets().get(0);
//使用密码加密保护
sheet.protect("654321", EnumSet.of(SheetProtectionType.All));
//保存文档
wb.saveToFile("ProtectWorksheet.xlsx", ExcelVersion.Version2010);
wb.dispose();
}
}
工作表加密结果:

【示例4】加密工作表指定数据范围
import com.spire.xls.*;
import java.util.EnumSet;
public class ProtectRange {
public static void main(String[] args) {
//加载测试文档
Workbook wb = new Workbook();
wb.loadFromFile("sample.xlsx");
//获取第一个工作表
Worksheet sheet = wb.getWorksheets().get(0);
//密码加密工作表
sheet.protect("123654", EnumSet.of(SheetProtectionType.All));
//指定可编辑的区域
sheet.addAllowEditRange("AllowEdit",sheet.getCellRange(3,1,11,8));
//保存文档
wb.saveToFile("ProtectRange.xlsx", ExcelVersion.Version2010);
wb.dispose();
}
}
指定区域加密结果:

【示例5】设置工作表公式隐藏
import com.spire.xls.*;
import java.util.EnumSet;
public class ProtectAndHideFormula {
public static void main(String[] args) {
//加载文档
Workbook wb = new Workbook();
wb.loadFromFile("sample.xlsx");
//获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
//设置加密
sheet.protect("123", EnumSet.of(SheetProtectionType.All));
//隐藏公式
sheet.getAllocatedRange().isFormulaHidden(true);
//保存文档
wb.saveToFile("HideFormula.xlsx",FileFormat.Version2010);
wb.dispose();
}
}
设置公式隐藏结果:

【示例6】解密Excel工作表
import com.spire.xls.*;
public class UnprotectSheet {
public static void main(String[] args) {
//加载文档
Workbook wb = new Workbook();
wb.loadFromFile("ProtectWorksheet.xlsx");
//获取工作表
Worksheet sheet = wb.getWorksheets().get(0);
//解除密码保护(需输入源文档密码)
sheet.unprotect("654321");
//保存文档
wb.saveToFile("UnprotectSheet.xlsx",ExcelVersion.Version2010);
wb.dispose();
}
}
运行程序,生成的文档中,指定工作表将不再受保护。
(本文完)
Java 加密/解密Excel的更多相关文章
- java加密解密的学习
注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...
- Java加密解密字符串
http://www.cnblogs.com/vwpolo/archive/2012/07/18/2597232.html Java加密解密字符串 旧文重发:http://www.blogjava ...
- java加密解密
java加密解密 public class MD5Util { /** * @param args */ public static void main(String[] args) { System ...
- password学4——Java 加密解密之消息摘要算法(MD5 SHA MAC)
Java 加密解密之消息摘要算法(MD5 SHA MAC) 消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest). 它是一个唯一相应一个消息或文本的固定长度 ...
- Java加密解密大全
ChinaSEI系列讲义(By 郭克华) Java加密解密方法大全 如果有文字等小错,请多包涵.在不盈利的情况下,欢迎免费传播. 版权所有.郭克华 本讲义经 ...
- java加密解密算法位运算
一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...
- ◆JAVA加密解密-3DES
从数据安全谈起 当你使用网银时,是否担心你的银行卡会被盗用? 当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露? 作为开发者,编写安全的代码比编写优雅的代码更重要,因为 ...
- java加密-解密小结
加密算法可以分为 双向加密(对称加密.不对称加密) 单向加密(不可逆加密)—— MD5.sha.hmac... 在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密 有: ...
- cooking java ——加密解密
java安全与密码概述 主要分为三部分: 密码学基础,包括:相关术语:分类:常用安全体系. java的安全组成:jdk以及第三方扩展. 相关实现代码,包括:base64.MD5········ 密码学 ...
随机推荐
- redis 集群模式
redis cluster 介绍 自动将数据进行分片,每个 master 上放一部分数据 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的 在 redis cluster 架构下 ...
- 【题解】HDU4689 Derangement(有技巧的计数DP)
[题解]HDU4689 Derangement(有技巧的计数DP) 传送门 呵呵没告诉我多测组数,然后\(n\le 20,7000\mathrm{ms}\)我写了个状压上去T了 题目大意: 要你求错排 ...
- $Poj1934\ Trip$ 线性$DP+$搜索
Luogu Description 爱丽丝和鲍伯想去度假,他们每个人都制定了一个参观城市的清单,该地区正好有26个城市,因此它们被编码为小写字母“a”到“z”.清单上可能重复出现某个城市.因为他们想一 ...
- SpringBoot基础架构篇1(SpringBoot、MyBatis-Plus与Thymeleaf)
show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 使用 MyBatis-Plus 以及 thymeleaf 实现增 ...
- Java异常处理原则与技巧总结
一 处理原则 Java异常代码中我们使用异常的目的是让异常的异常类型来提示“什么”被抛出了--- 即出了什么问题:用异常的栈打印信息来跟踪异常在“哪里”抛出 --- 即哪里出了问题: 异常提示信息来 ...
- Http GetPost网络请求
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...
- 对Java中可变参数的理解
说明 可变参数:是DK1.5之后出现的新特性,其实可变参数是0.1.2.3.....个参数的数组 使用前提 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式 修饰符 ...
- 如何应用threejs实现立方体每个面用图片替换
var geometry = new THREE.BoxGeometry(200, 200, 200);var materialsbg = []; for (var i = 0; i < geo ...
- python修改列表
替换元素 效果图: 代码: #创建一个列表 list = ['a','b','c','d','e','f'] print('修改前:',list) #修改元素 指定索引重设其值 list[1] = ' ...
- DP-直线分割递推
在 DP 里有一类是直线分割平面的问题 , 也是属于递推 类的 . 一 . 直线分割平面的问题 先考虑第一个小问题 : n 条直线最多可以将平面分割成几部分 ? 想想 最优的分割方法是怎样的呢 ? ...