CustemhandlerUtils.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.huaxu.common;
  2. import com.alibaba.excel.enums.CellDataTypeEnum;
  3. import com.alibaba.excel.metadata.CellData;
  4. import com.alibaba.excel.metadata.Head;
  5. import com.alibaba.excel.util.CollectionUtils;
  6. import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
  7. import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
  8. import org.apache.poi.ss.usermodel.Cell;
  9. import java.util.HashMap;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * @author xjh
  14. * @version 1.0
  15. * @date 2020/10/19 19 19:21
  16. */
  17. public class CustemhandlerUtils extends AbstractColumnWidthStyleStrategy {
  18. private static final int MAX_COLUMN_WIDTH = 255;
  19. //因为在自动列宽的过程中,有些设置地方让列宽显得紧凑,所以做出了个判断
  20. private static final int COLUMN_WIDTH = 20;
  21. private Map<Integer, Map<Integer, Integer>> CACHE = new HashMap(8);
  22. public CustemhandlerUtils() {
  23. }
  24. @Override
  25. protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
  26. boolean needSetWidth = isHead || !CollectionUtils.isEmpty(cellDataList);
  27. if (needSetWidth) {
  28. Map<Integer, Integer> maxColumnWidthMap = (Map)CACHE.get(writeSheetHolder.getSheetNo());
  29. if (maxColumnWidthMap == null) {
  30. maxColumnWidthMap = new HashMap(16);
  31. CACHE.put(writeSheetHolder.getSheetNo(), maxColumnWidthMap);
  32. }
  33. Integer columnWidth = this.dataLength(cellDataList, cell, isHead);
  34. if (columnWidth >= 0) {
  35. if (columnWidth > MAX_COLUMN_WIDTH) {
  36. columnWidth = MAX_COLUMN_WIDTH;
  37. }else {
  38. if(columnWidth<COLUMN_WIDTH){
  39. columnWidth =columnWidth;
  40. }
  41. }
  42. Integer maxColumnWidth = (Integer)((Map)maxColumnWidthMap).get(cell.getColumnIndex());
  43. if (maxColumnWidth == null || columnWidth > maxColumnWidth) {
  44. ((Map)maxColumnWidthMap).put(cell.getColumnIndex(), columnWidth);
  45. writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), columnWidth* 256);
  46. }
  47. }
  48. }
  49. }
  50. private Integer dataLength(List<CellData> cellDataList, Cell cell, Boolean isHead) {
  51. if (isHead) {
  52. return cell.getStringCellValue().getBytes().length;
  53. } else {
  54. CellData cellData = (CellData)cellDataList.get(0);
  55. CellDataTypeEnum type = cellData.getType();
  56. if (type == null) {
  57. return -1;
  58. } else {
  59. switch(type) {
  60. case STRING:
  61. return cellData.getStringValue().getBytes().length;
  62. case BOOLEAN:
  63. return cellData.getBooleanValue().toString().getBytes().length;
  64. case NUMBER:
  65. return cellData.getNumberValue().toString().getBytes().length;
  66. default:
  67. return -1;
  68. }
  69. }
  70. }
  71. }
  72. }