[alibaba/easyexcel]如何锁定指定的列

2024-05-24 310 views
1

异常代码 public class CustomCellWriteHandler implements CellWriteHandler {

@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
                             Head head, int relativeRowIndex, boolean isHead) {

}

@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, CellData cellData,
                            Cell cell, Head head, int relativeRowIndex, boolean isHead) {
    // 锁定前三列
    if (cell.getColumnIndex() <= 2) {
        CellStyle cellStyle = cell.getCellStyle();
        cellStyle.setLocked(true);
        cell.setCellStyle(cellStyle);
    } else {
        CellStyle cellStyle = cell.getCellStyle();
        cellStyle.setLocked(false);
        cell.setCellStyle(cellStyle);
    }
}

}

public class CustomSheetWriteHandler implements SheetWriteHandler {

@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

}

@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {

    writeSheetHolder.getSheet().protectSheet("");

}

}

这样实现两个接口,最终结果为整个sheet都不锁定,我想实现指定列锁定应该怎么做呢?

回答

4

设置inmomery=true试试

6

设置inmomery=true试试

尝试了,不起作用。

7

实测没问题。 实现拦截器:

@Slf4j
public class WriteHandler extends AbstractSheetWriteHandler {

    @Override
    public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder,
        WriteSheetHolder writeSheetHolder) {
        log.info("锁住");
        writeSheetHolder.getSheet().protectSheet("edit");
    }
}

然后那边是style用lock参数即可。