关于HTML表格导出的两种方式,使用datatables插件excelHtml5和Apache POI

引言

datatables是基于jQuery的HTML表格插件,通过各种参数配置可以自定义出对应的表格功能。同时datatables有许多plug可以扩展功能。
表格导出Excel是很常见的需求,有两种实现方式,前端导出以及使用POI后台生成Excel文件返回文件流到前台下载。
前端导出有很多种,有ActiveX、flash、html5,兼容性各不相同。

下面分享实际使用POI和excelHtml5中遇到的问题及解决方法。

使用datatables插件excelHtml5导出Excel表格

excelHtml5是datatables的一个扩展插件,因为 html5 的特性,只支持IE10以上的浏览器,其他主流浏览器如Chrome、Firefox均可使用。
如果需要在IE10以下的浏览器可使用excelFlash扩展,与ActiveX类似,flash也是一种淘汰的标准。

使用excelHtml5需要引入对应js库,如下:

  • DataTables
  • Buttons
  • HTML5 export
  • JSZip

注意对于引入的js版本不一样会产生兼容性问题而无法使用,具体参考 https://datatables.net/download/

使用很简单,只需要为DataTable添加buttons参数即可,样例代码:

$('#myTable').DataTable( {
    buttons: [
        {
            extend: 'excelHtml5',
            text: 'Save current page',
            exportOptions: {
                modifier: {
                    page: 'current'
                }
            }
        }
    ]
} );

使用POI接口HSSF和XSSF导出Excel表格

HSSF和XSSF是实现不同Excel格式的工具类,分别是Excel '97(-2007)、Excel 2007 OOXML (.xlsx)。功能十分强大,可方便读写Excel文件。在实际Java Web的开发中需要将创建的文件以流的形式返回给浏览器,从而实现导出。

通过循环遍历可以把数据写入到对应行(Row)和单元格(Cell),样例代码如下:

public void createExcel() throws Exception {
	Workbook wb = new HSSFWorkbook();
	CreationHelper createHelper = wb.getCreationHelper();
	Sheet sheet = wb.createSheet("new sheet");
	// Create a row and put some cells in it. Rows are 0 based.
	Row row = sheet.createRow(0);
	// Create a cell and put a date value in it. 
	Cell cell = row.createCell(0);
	cell.setCellValue(new Date());
	cell = row.createCell(1);
	cell.setCellValue(new Date());
	// Write the output to a file
	try (OutputStream fileOut = new FileOutputStream("workbook.xls")) {
		wb.write(fileOut);
	}
}

用户导出时,用户可以发起下载的HTTP请求,后台服务可以将通过POI创建的Excel文件以流的形式返回,样例代码如下:

public void downLoad(HttpServletResponse response) throws Exception {
	//set respone
	response.setHeader("conent-type", "application/octet-stream");
	response.setContentType("application/octet-stream");
	response.addHeader("Content-Disposition", "attachment;filename="+file.getName());
	//get Excel File outputstream
	File file=new File("Test.xls");
	OutputStream outputStream=response.getOutputStream();
	BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));        
	//write outputstream to response
	byte[] b = new byte[1024];int n;
	while ((n = inputStream.read(b)) != -1) {
		outputStream.write(b, 0, n);
	}
	br.close();
	out.close();
}

总结

使用datatables插件excelHtml5浏览器端导出兼容性很差,以及在Excel的样式自定义中不如POI这样强大。但是使用方便简单快捷,不会对服务器产生压力。

POI导出则是借助HTTP请求下载Excel文件流,对浏览器没有任何要求。但是POI使用复杂,对服务器会产生一定压力,例如导入超过1W行以上的数据。

在实际开发中则因具体情况、具体需求而异,推荐在单页导出、高版本浏览器中使用浏览器端导出,在数据量大、浏览器版本要求较为严格的情况使用POI在服务器生成Excel文件导出。

参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java使用jQuery表格插件datatables,您需要将datatables插件JavaScript和CSS文件添加到您的项目中,并将它们链接到您的HTML页面。然后,您可以使用以下步骤来在Java使用datatables插件: 1.在HTML页面中创建一个表格,并添加一个唯一的ID。 2.在JavaScript代码中初始化datatables插件,并将其绑定到表格的ID。 例如,以下是初始化datatables插件并将其绑定到表格ID为"example"的代码示例: ``` $(document).ready(function() { $('#example').DataTable(); } ); ``` 3.在Java代码中,您需要从数据库中检索数据,并将其转换为JSON格式。 4.将JSON数据传递给您的HTML页面,以便datatables插件可以使用它来填充表格。 例如,以下是从Java中检索数据并将其转换为JSON格式的代码示例: ``` List<Employee> employees = employeeService.getEmployees(); Gson gson = new Gson(); String json = gson.toJson(employees); model.addAttribute("employeesJson", json); ``` 5.在HTML页面中,使用datatables插件的"ajax"选项将JSON数据传递给表格。 例如,以下是将JSON数据传递给表格的代码示例: ``` $(document).ready(function() { $('#example').DataTable( { "ajax": "/employees", "columns": [ { "data": "id" }, { "data": "name" }, { "data": "position" }, { "data": "salary" } ] } ); } ); ``` 在上述代码中,"ajax"选项指向您的Java控制器中的URL,该控制器返回JSON数据。"columns"选项指定表格的列。每个"columns"对象中的"data"属性指定JSON数据对象中的属性。 希望这可以帮助您开始在Java使用datatables插件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值