JXL实现大批量数据循环分页导出Excel研究(三)

常见报表开发工具POI和JXL(JExcel)。本文采用JXL实现导出Excle功能。Excle-2003中对每个工作表的数据量大小有限制,行数最大限制为65536行,列数最大限制为256列。一个工作薄(workbook)可以有多个工作表(sheet)。


实现大批量数据导出Excel的方法

  • 导出csv格式的数据
缺点:数据格式不能保证
优点:操作简单
  • 导出多个中间文件,将多个中间文件合并
缺点:一个中间文件只能有一个工作表(sheet),合并文件也要耗时。
优点:只要设定好每次请求数据大小,几乎不存在内存溢出问题。
  • 导出一个文件,循环分页请求数据,写入excel是分多个工作表(sheet)写入
缺点:对于大量数据虽然利用循环分页的形式处理了一次性读取数据引发的内存溢出问题,但是,由于JXL在写入excel是,都是一次性写入的,所以还是回出现内存溢出问题。
优点:能够实现10万条以内数据导出。
  • 导出一个Excel文件的xml形式,另存为.xls文件
缺点:
优点:

实现第3种方法,实现思路:

  1. 创建一个workbook,先设定导出参数,每次从数据库请求的数据条数,每个工作表放置的最大行数,根据查询记录总数 / 每次请求记录数 = 循环分页请求数据次数。
  2. 请求后台得到数据,对数据合法性进行保证,jxl导出是,数据字段不能为null。
  3. 读取数据,创建一个sheet,如果当前的行数大于最大设定行数,则新建一个sheet写入。将数据不断转换为sheet中的单元格label对象。
  4. 请求数据结束,调用workbook写入方法,关闭workbook,关闭输出流。

下面是封装后的类:

package com.xsm.pub.tool;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

import java.util.Map;


import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 
 * @author 
 * @时间 : 2014-7-24 上午09:23:47  
 * @功能 : TODO 大数据量导出Excel
 */
public class ExportExcelMassData {
	private static final Log log = LogFactory.getLog(ExportExcelMassData.class);

	public int totalSize;//总行数
	public int firstRow = 0; 	// 开始请求数据行号	
	public int getDataTimes;//请求数据次数 totalSize / perPageSize + 1
	
	public int perPageSize = 5000; // 一次请求分页大小
	public int perSheetMaxRows = 10000;	//每个工作表最大行数
	
	public Map mapTitle = null;	//列头
	public Map ma
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些相关的参考信息。 1. 数据导出 首先需要引入jxl相关的jar包,然后创建一个Excel文件并设置列名和数据,最后将数据写入Excel文件中即可。 示例代码如下: ```java // 定义Excel文件名和工作表名 String fileName = "example.xls"; String sheetName = "Sheet1"; // 创建Excel文件 WritableWorkbook workbook = Workbook.createWorkbook(new File(fileName)); WritableSheet sheet = workbook.createSheet(sheetName, 0); // 设置列名 Label label = new Label(0, 0, "姓名"); sheet.addCell(label); label = new Label(1, 0, "年龄"); sheet.addCell(label); // 设置数据 for (int i = 0; i < dataList.size(); i++) { Map<String, Object> data = dataList.get(i); label = new Label(0, i + 1, data.get("name").toString()); sheet.addCell(label); label = new Label(1, i + 1, data.get("age").toString()); sheet.addCell(label); } // 写入Excel文件 workbook.write(); workbook.close(); ``` 2. 数据导入 需要引入cos相关的jar包,然后读取Excel文件中的数据并进行处理。 示例代码如下: ```java // 定义Excel文件名和工作表名 String fileName = "example.xls"; String sheetName = "Sheet1"; // 读取Excel文件 Workbook workbook = Workbook.getWorkbook(new File(fileName)); Sheet sheet = workbook.getSheet(sheetName); // 获取数据 List<Map<String, Object>> dataList = new ArrayList<>(); for (int i = 1; i < sheet.getRows(); i++) { Map<String, Object> data = new HashMap<>(); data.put("name", sheet.getCell(0, i).getContents()); data.put("age", sheet.getCell(1, i).getContents()); dataList.add(data); } // 处理数据 for (int i = 0; i < dataList.size(); i++) { // TODO: 对数据进行处理或存储 } // 关闭Excel文件 workbook.close(); ``` 以上是一个基本的使用jxl实现Excel表格的数据导入和导出的示例代码,希望对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值