[alibaba/easyexcel]easyExcel 锁定期间列相关的单元格失败

2023-02-28 307 views
2

只有导出的列是期间(2022-02,字符串类型)的才会失败,其他列正常锁定。

加锁相关代码如下,columnList存放的是相关的列:

   <html>
<body>
<!--StartFragment-->

@Override
--
  | public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) {
  | cellStyle.setAlignment(HorizontalAlignment.CENTER);
  | if (!CollectionUtils.isEmpty(columnList))
  | {
  | if (columnList.contains(cell.getColumnIndex()))
  | {
  | // 设置表单保护密码(随机)
  | UUID uuid = UUID.randomUUID();
  | writeSheetHolder.getSheet().protectSheet(uuid.toString() );
  | // 设置锁定单元格
  | cellStyle.setLocked(true);
  | }
  | else
  | {
  | //非锁定单元格 必须手动设置为 false
  | cellStyle.setLocked(false);
  | }
  | }
  | // 填充单元格样式
  | cell.setCellStyle(cellStyle);
  | }
效果如下

灰色的代表禁用成功,白色的还是可以修改

企业微信截图_16775733234381 相关版本和变量 com.alibaba easyexcel 2.2.8
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.17</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.17</version>
    </dependency>

@ContentStyle(dataFormat = 49) @ExcelProperty(value = "期间") private String periodName;

回答

8

感觉像是你自己判断逻辑的问题啊
而且 writeSheetHolder.getSheet().protectSheet(uuid.toString() ); 应该只需要加一次就好了吧 可以在sheet或者workbook拦截器中用

6

刚刚试过了,writeSheetHolder.getSheet().protectSheet(uuid.toString() ); 加一次也是一样的效果,最主要还是其他字段是正常的,期间字段就不行

3

我觉得是因为你的cellStyle.setLocked(true); 代码没走进去 打断点试试

3

走进去了的,我感觉是因为我先对单元格渲染,之后EasyExcel又对单元格二次渲染,导致第一次的失效了

4

afterCellCreate换成afterCellDispose

2

这个方案还真可以,感谢朋友

4

OK