Poi操作保护工作表后指定区域内删除行列

在使用Apache Poi处理Excel文件时,遇到一个挑战:如何在保护工作表并锁定部分区域后,允许用户删除特定列。通过分析Poi源码和调整代码,解决了在复制保护工作表后,删除列功能失效的问题。关键在于正确设置CTSheetProtection的属性,并确保在复制sheet时不会引入锁定的空白单元格。
摘要由CSDN通过智能技术生成

最近做的一个物流项目,其主要操作是处理上传和下载Excel文件的,主要用的第三方的Poi的jar包。前几天遇到个问题,纠结了好几天终于得以解决,现将过程记录下。

作成结构相同的多sheet的Excel文件,其中根据业务要求,sheet中分为两块,一块是固定部分要求锁定,
不能做修改、插入及删除行列的操作,另一部分是动态部分,只允许删除列。

本来以为不难实现,然而在做到动态部分允许删除列时,一直存在问题,开始的思路是在模板文件的sheet中将动态可删除列部分全选中,右击设置单元格格式–在保护界面将锁定前面的勾去掉,再设置保护sheet(审阅–保护工作表–勾选上面的保护工作表及锁定的单元格内容–勾选删除列及其他需要的属性),然后复制模板sheet将数据写入就可以了。

然而在做sheet复制后,新复制出来的sheet丢失了保护属性,看来在模板中设置保护属性再复制的思路行不通,郁闷,于是上网搜索,提到poi中对于sheet对象提供了protectSheet(String password)方法,于是对于新复制出来的sheet设置该属性,可是问题又来了,下载下来的Excel文件保护工作表选项中没有勾选删除列,于是查看Poi源码,发现protectSheet的方法如下:

    @Override
    public void protectSheet(String password) {
        if (password != null) {
            CTSheetProtection sheetProtection = safeGetProtectionField();
            setSheetPassword(password, null); // defaults to xor password
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值