code: private Workbook writeToExcel(List<Writer<?>> titles, List<List<Writer<?>>> datas,
                                    boolean hasTitle, Workbook workbook, boolean transverse) {
          if (CollectionUtil.safeIsEmpty(datas)) {
              log.warn("数据为空，不写入直接返回");
              return workbook;
          }
  
          log.info("写入excel，{}标题", hasTitle ? "需要" : "不需要");
          Sheet sheet = workbook.createSheet();
          int rowNum = 0;
  
          if (hasTitle && !CollectionUtil.safeIsEmpty(titles)) {
              log.debug("需要标题，标题为：{}", titles);
              List<List<Writer<?>>> lists = new ArrayList<>(datas.size() + 1);
              lists.add(titles);
              lists.addAll(datas);
              datas = lists;
          }
  
          if (transverse) {
              datas = CollectionUtil.matrixTransform(datas);
          }
  
          for (int i = rowNum; i < (rowNum + datas.size()); i++) {
              Row row = sheet.createRow(i);
              List<? extends Writer> columnDatas = datas.get(i - rowNum);
              if (CollectionUtil.safeIsEmpty(columnDatas)) {
                  continue;
              }
              for (int j = 0; j < columnDatas.size(); j++) {
                  Writer<?> data = columnDatas.get(j);
                  if (data == null) {
                      continue;
                  }
                  log.debug("写入第[{}]行第[{}]列数据[{}]", i, j, data.data);
                  data.write(row.createCell(j));
              }
          }
          return workbook;
      }
docs: 写入excel（实际处理方法，在该方法中数据将会被写入excel）
  
  @param titles   标题列表
  @param datas    数据列表
  @param hasTitle 是否需要标题
  @param workbook 工作簿
  @param transverse 是否横向写入（一列对应一个pojo，标题在第一列），默认false（一行一个pojo，标题在第一行）
  @return 写入数据后的工作簿