code: @SneakyThrows
      private void processExcelCellAnnotation(Field field, Object bean) {
          val ann = field.getAnnotation(ExcelCell.class);
          if (ann == null) return;
  
          Object fv = Fields.invokeField(field, bean);
  
          if (ann.sheetName()) {
              if (StringUtils.isNotEmpty(ann.replace())) { // 有内容需要替换
                  fv = sheet.getSheetName().replace(ann.replace(), Str.nullThen(fv, ""));
              }
  
              val wb = sheet.getWorkbook();
              val oldSheetName = sheet.getSheetName();
              val newSheetName = "" + fv;
              wb.setSheetName(wb.getSheetIndex(sheet), newSheetName);
  
              PoiUtil.fixChartSheetNameRef(sheet, oldSheetName, newSheetName);
          } else {
              val cell = PoiUtil.findCell(sheet, ann.value(), StringUtils.defaultIfEmpty(ann.searchKey(), "{" + field.getName() + "}"));
              if (cell == null) {
                  log.warn("unable to find cell for {} in field {}", ann, field);
                  return;
              }
  
              if (StringUtils.isNotEmpty(ann.replace())) { // 有内容需要替换
                  val old = PoiUtil.getCellStringValue(cell);
                  fv = old.replace(ann.replace(), Str.nullThen(fv, ""));
              }
  
              applyTemplateCellStyle(field, bean, ann, cell);
  
              val strCellValue = PoiUtil.writeCellValue(cell, fv);
              fixMaxRowHeightRatio(cell.getRow(), ann.maxLineLen(), strCellValue);
          }
      }
docs: 处理@ExcelCell注解的字段。
  
  @param field JavaBean反射字段。
  @param bean  字段所在的JavaBean。