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); } }
这样即使有中文也能自适应列宽。