当前位置:   article > 正文

easyexcel 3.0.x 怎么指定锁定哪列 easyexcel非全表锁定 easyexcel锁定失败锁了全表_registerwritehandler无效

registerwritehandler无效

使用版本3.0.5的easyexcel的handler接口,如下代码,锁定第一列,余下列都不锁定。

但是死活不成功,只要一锁就是全表。

气死本宝宝了。

  1. public class CellHandler implements CellWriteHandler {
  2. private CellStyle cellStyle;
  3. @Override
  4. public int order() {
  5. return Integer.MAX_VALUE;
  6. }
  7. @Override
  8. public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
  9. cellStyle = writeSheetHolder.getSheet().getWorkbook().createCellStyle();
  10. writeSheetHolder.getSheet().protectSheet("1");
  11. }
  12. @Override
  13. public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
  14. }
  15. @Override
  16. public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
  17. }
  18. @Override
  19. public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
  20. if(cell.getColumnIndex()==0){
  21. cellStyle.setLocked(true);
  22. }else{
  23. cellStyle.setLocked(false);
  24. }
  25. cell.setCellStyle(cellStyle);
  26. }
  27. }

 到处找文档,都没找到为什么。

在github上的issue里看到说只要设定了protectSheet就是锁全表。

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

我就尝试着把这句去掉。

结果,放他妈的狗屁。

去掉就全锁不上。

再后来,我在想,这个handler是通过 .registerWriteHandler(new CellHandler()) 注册进去的。

  1. EasyExcel.write(fileName, DemoData.class)
  2. .registerWriteHandler(new WriteHandler() {
  3. @Override
  4. public int order() {
  5. return 0;
  6. }
  7. })
  8. .sheet("模板")
  9. .registerWriteHandler(new CellHandler())
  10. .doWrite(DemoData::data);

于是想到,会不会是链表调用顺序的问题?我设定格子锁定其实是写进去了的,但是又被后来的格式给覆盖了。

于是聪明的我,就跑去找。

找来找去,都没找到定义链表执行顺序的地方。

在handler接口一按alt+o

看到了一个order字段

于是火速实现。

  1. @Override
  2. public int order() {
  3. return Integer.MAX_VALUE;
  4. }

 这样子,我的格式定制器,肯定是最后被调用的了吧。

结果:只有第一列被锁住了,其它列都能进行编辑,成功!

真是气死我了,调了我一天。最后发现是这个原因……

真的觉得alibaba这个easyExcel格式冲突处理真的是做得很不好,做个用户指定优先不行吗?

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/170365
推荐阅读
相关标签
  

闽ICP备14008679号