Java使用POI设置Excel允许编辑区域密码输入提示错误如何解决
你代码的核心错误是对CTProtectedRange.setPassword方法的入参逻辑理解有误:该方法要求传入的是符合Excel规范的密码哈希值字节数组,而非明文密码直接转十六进制得到的原始字节。你当前直接将明文"AB"转hex后传入,Excel在校验时会把用户输入的密码做哈希运算后再比对,二者必然不匹配,因此触发密码错误提示。
解决方案
使用POI内置的密码哈希工具类生成符合Excel要求的哈希值,替换原有的密码处理逻辑即可,修改后完整核心代码如下:
import org.apache.poi.util.CryptoFunctions; // 保留你原有其他导入 String pwd = "AB"; // 生成Excel 16位异或哈希值,兼容所有版本Excel byte[] passwordHash = CryptoFunctions.createXorVerifier1(pwd); CTProtectedRange ctProtectedRange = sheet.getCTWorksheet().addNewProtectedRanges().addNewProtectedRange(); ctProtectedRange.setName("protect"); ctProtectedRange.setPassword(passwordHash); ctProtectedRange.setSqref(List.of("A1:D1")); sheet.protectSheet("1");
修改后重新生成Excel,输入密码"AB"即可正常编辑指定区域。
内容的提问来源于stack exchange,提问作者Hans
相关产品推荐
相关产品推荐

