在处理大量数据并将其导出为Excel文件时,Java开发者经常会面临如何高效且美观地组织信息的问题。本文将基于EasyExcel库,展示一个简短的代码示例,以说明如何创建包含多个工作表(Sheets)的Excel文件,并设置单元格边框线以及实现列宽的自动调整。

创建多Sheet Excel文件

使用EasyExcel,我们可以通过调用write()方法和writerSheet()方法来指定不同Sheet的数据源及其头部定义。下面是一个简化版的代码片段,它演示了如何从给定文件夹路径读取数据,然后将这些数据写入到两个不同的Sheet中,分别命名为“Codes”和“Errors”。

private void writeExcelDemo() {
	    String outputPath = "test.xlsx";
	    List<QrCodeData> qrCodes = new ArrayList<>();
	    List<ErrorData> errors = new ArrayList<>();
	    processFolderRecursively(folder, qrCodes, errors);
	
	    try (ExcelWriter excelWriter = EasyExcel.write(outputPath)
	            .registerWriteHandler(this.getHorizontalCellStyleStrategy())
	            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
	            .build()) {
	
	        WriteSheet codesSheet = EasyExcel.writerSheet("Codes").head(QrCodeData.class).build();
	        excelWriter.write(qrCodes, codesSheet);
	
	        WriteSheet errorsSheet = EasyExcel.writerSheet("Errors").head(ErrorData.class).build();
	        excelWriter.write(errors, errorsSheet);
	        
	    } catch (Exception e) {
	        log.error("输出Excel异常", e);
	    }
	}
	
	/**
	 * 设置单元格样式
	 *
	 * @return HorizontalCellStyleStrategy
	 */
	private HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
	    // 设置边框样式
	    WriteCellStyle headWriteCellStyle = new WriteCellStyle();
	    WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
	
	    // 设置边框
	    BorderStyle borderStyle = BorderStyle.THIN;
	    headWriteCellStyle.setBorderTop(borderStyle);
	    headWriteCellStyle.setBorderBottom(borderStyle);
	    headWriteCellStyle.setBorderLeft(borderStyle);
	    headWriteCellStyle.setBorderRight(borderStyle);
	
	    contentWriteCellStyle.setBorderTop(borderStyle);
	    contentWriteCellStyle.setBorderBottom(borderStyle);
	    contentWriteCellStyle.setBorderLeft(borderStyle);
	    contentWriteCellStyle.setBorderRight(borderStyle);
	
	    // 创建水平样式策略
	    return new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
	}

以上代码基于 easyexcel 4.0.3 版本。

设置单元格边框线

为了使生成的Excel表格更加专业,我们可以为单元格添加边框线。这可以通过注册自定义的样式处理器HorizontalCellStyleStrategy来实现。在上面的代码中,this.getHorizontalCellStyleStrategy()应该返回一个实现了此类功能的对象,确保所有单元格都有清晰的边界。

列宽自动调整策略

为了让表格内容更易读,EasyExcel提供了LongestMatchColumnWidthStyleStrategy这样的策略(你也可以参考这个类自定义自己的列宽策略,比如设置一个最宽值等等),用于根据最长匹配原则自动调整各列宽度。通过在构建ExcelWriter时注册此策略,可以保证即使文本长度不一,也能获得良好的显示效果。

综上所述,借助EasyExcel的强大功能,开发者不仅能够轻松地创建复杂的Excel文档,还能对文档样式进行细致控制,从而满足各种业务需求。


(END)