java对excel文件进行加密?
打开文件后就提示输入密码,否则不能打开文件
org.apache.poi.hssf.usermodel.HSSFWorkbook
public void writeProtectWorkbook(@NotNull java.lang.String password,
@NotNull java.lang.String username)
这个api只能对文件进行写保护。
org.apache.poi.hssf.usermodel.HSSFWorkbook
public void writeProtectWorkbook(@NotNull java.lang.String password,
@NotNull java.lang.String username)
这个api只能对文件进行写保护。
加密Excel通常有三种方式:保护文档、仅加密其中某个工作表、锁定某些单元格不能编辑。我使用了Spire.XLS for Java类库分别实现了以上三种加密方式。提供以下代码供参考。
保护文档
import com.spire.xls.*;
public class EncryptWorkbook {
public static void main(String[] args) {
//加载示例文档
Workbook workbook = new Workbook();
workbook.loadFromFile("Sample.xlsx");
//使用密码加密保护
workbook.protect("eiceblue");
//保存文档
workbook.saveToFile("output/EncryptWorkbook.xlsx", ExcelVersion.Version2010);
}
}
仅加密第一个工作表
import com.spire.xls.*;
import java.util.EnumSet;
public class ProtectWorksheet {
public static void main(String[] args) {
//加载示例文档
Workbook workbook = new Workbook();
workbook.loadFromFile("Sample.xlsx");
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//使用密码加密保护
sheet.protect("TestPassword", EnumSet.of(SheetProtectionType.All));
//保存文档
workbook.saveToFile("output/ProtectWorksheet.xlsx", ExcelVersion.Version2010);
}
}
锁定某些区域不可编辑
import com.spire.xls.*;
import java.util.EnumSet;
public class ProtectCell {
public static void main(String[] args) {
//加载示例文档
Workbook workbook = new Workbook();
workbook.loadFromFile("Sample.xlsx");
//获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
//保护行与列
sheet.getCellRange("B3").getCellStyle().setLocked(true);
sheet.getCellRange("C3").getCellStyle().setLocked(false);
//密码加密保护工作表
sheet.protect("TestPassword", EnumSet.of(SheetProtectionType.All));
//保存文档
workbook.saveToFile("output/ProtectCell.xlsx", ExcelVersion.Version2010);
}
}
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答4k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
有点好奇,找了一下,的确如题主所说,poi的支持不太好,加密只能是改成只读的没办法完全拦截
poi源码:
然后又找了下,很多人问没有被解决的,找到了个替代的方法见poi-security
下来大概试了一下,只能修改xlsx的文件,是用加密把xlsx本身包装了一下,之后再用解密的方法来得到excel对象,加密后的文件excel软件没办法正常读取了