saiku导出excel单元格格式与中文列宽自动适应

在saiku导出excel后打开发现单元格的整数也显示为小数,并且含有中文的列宽没有自动适应,解决办法如下:

打开ExcelWorksheetBuilder.java文件,找到applyCellFormatting方法,看名字应该能猜到这个方法是设置单元格格式的,修改如下:

if ((formatString != null) && (formatString.trim().length() > 0)) {
    省略部分代码...
}else {
    //没有formatString的时候设置为常规单元格格式
      cell.setCellStyle(basicCS);
}

这样当没有设置formatString时单元格的格式为常规格式。

同样在ExcelWorksheetBuilder.java文件,找到finalizeExcelSheet方法,其中workbookSheet.autoSizeColumn(i)为自适应宽度,但这个方法无法识别中文,作如下修改:

if (autoSize) {
      // Autosize columns
      for (int i=0; i < maxColumns && i < rowsetBody[0].length; i++) {
        workbookSheet.autoSizeColumn(i);        
        //设置中文列宽自适应
        int curColWidth = workbookSheet.getColumnWidth(i)/256;
        for (int rowNum = 0; rowNum < workbookSheet.getLastRowNum(); rowNum++) {
            Row currentRow;  
            //当前行未被使用过  
            if (workbookSheet.getRow(rowNum) == null) {  
                currentRow = workbookSheet.createRow(rowNum);  
            } else {  
                currentRow = workbookSheet.getRow(rowNum);  
            }
            if (currentRow.getCell(i) != null) {
                Cell currentCell = currentRow.getCell(i);
                if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                    int length = currentCell.getStringCellValue().getBytes().length;
                    if (curColWidth < length) {  
                        curColWidth = length;  
                    }
                }
            }
        }        
        workbookSheet.setColumnWidth(i,curColWidth*256);
      }      
    }

这样即使有中文也能自适应列宽。

原文地址:https://www.cnblogs.com/Jason-Xiang/p/5151820.html