JXLS应用示例

JXLS在循环的记录前加序号:

 

  <jx:forEach items="${employees}" var="employee" varStatus="status">
                    | ${status.index} | ${employee.name} | ${employee.payment} | ${employee.bonus}
                    </jx:forEach>

 
使用status.index,由于status.index默认从0开始所以可以使用${status.index+1}

 

使用excel本身的函数时使用$[]符号

$[C5*(1+D5)]

$[SUM(E5)]

 

格式问题,一般可以通过调整单元格的格式来调节格式。但是要注意,数据为double型的数据如果在xls模板中使用时如double d = 5000;

这样单独使用如${d}时显示结果为5000,但是如果把它和其它的属性一起如:${d}${employee.age}或者${employee.age}${d}时会显示5000.039,其中5000变成了5000.0;39为age的值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jxls 是一个用于 Excel 导入导出的 Java 库,它提供了非常方便的 API 来操作 Excel 文件。但在处理大数据量的 Excel 导出时,可能会遇到内存不足的问题,因为 jxls 默认是将所有数据加载到内存中再进行导出。 为了解决这个问题,我们可以使用 jxls 提供的流式导出功能,将数据分批次写入到 Excel 文件中,避免一次性加载所有数据。 下面是一个 jxls 大数据导出内存优化的示例代码: ```java public class JxlsExportUtil { /** * 导出 Excel 文件 * @param templateFilePath 模板文件路径 * @param outputStream 输出流 * @param data 数据集合 * @param maxRowPerSheet 每个 Sheet 最大行数 */ public static void exportExcel(String templateFilePath, OutputStream outputStream, List<?> data, int maxRowPerSheet) throws IOException { try (InputStream inputStream = new FileInputStream(templateFilePath)) { JxlsHelper jxlsHelper = JxlsHelper.getInstance(); try (OutputStream tempOutputStream = new BufferedOutputStream(outputStream)) { jxlsHelper.processTemplate(inputStream, tempOutputStream, new Context()); } int sheetIndex = 0; int rowIndex = 0; try (InputStream tempInputStream = new BufferedInputStream(new FileInputStream(templateFilePath))) { try (Workbook workbook = WorkbookFactory.create(tempInputStream)) { Sheet sheet = workbook.getSheetAt(sheetIndex); Row row = sheet.getRow(rowIndex); int dataCount = data.size(); int processedRowCount = 0; while (processedRowCount < dataCount) { // 写入数据 int currentSheetRowCount = 0; while (rowIndex < sheet.getLastRowNum() && currentSheetRowCount < maxRowPerSheet) { row = sheet.getRow(rowIndex++); if (row == null) { continue; } writeData(row, data.get(processedRowCount++)); currentSheetRowCount++; } // 复制 Sheet if (processedRowCount < dataCount) { sheetIndex++; rowIndex = 0; sheet = workbook.cloneSheet(0); workbook.setSheetName(sheetIndex, sheet.getSheetName() + sheetIndex); row = sheet.getRow(rowIndex); } } // 删除模板 Sheet workbook.removeSheetAt(0); // 输出 Excel 文件 workbook.write(outputStream); } } } } /** * 写入数据到行 * @param row Excel 行对象 * @param data 数据对象 */ private static void writeData(Row row, Object data) { // TODO: 根据具体需求实现写入逻辑 } } ``` 这个示例代码中,我们首先使用 jxls 将模板文件写入到输出流中,然后根据每个 Sheet 最大行数分批次写入数据。在写入数据时,我们需要根据具体需求实现 `writeData` 方法,将数据写入到 Excel 行对象中。 使用这个示例代码,我们可以将 jxls 的内存占用降到最低,避免出现内存不足的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值