一个需求,用户点击下载按钮,将指定的excel的报表模板使用数据库数据渲染,然后下载到用户本地;
通常而言,对于一个文件的下载,可以有以下几种方式:
window.location.href=文件名称URL全路径;
window.open(文件名称URL全路径);
这种方式不友好的地方在于服务器的目录结构直接暴露出去,而且在IE下很有可能会报错权限问题等,甚至firefox中会触发那个年代久远而依然没有解决的bug。所以这里不推荐。
对于jxl生成excel文件,有两种方式,一种是生成文件保存到磁盘,另一种是直接保存到输出流中。
对于上述需求,如果生成的文件保存到磁盘,随着系统运行,磁盘会逐渐被占用,需要手动去删除。由于文件都较小,所以这里采用第二种方式,直接在内存中生成文件,然后提供给用户下载的时候response回去。
看一个例子:
用于响应下载请求的controller
/**
* 下载个人订单
* @param request
* @param response
* @param modelMap
*/
@RequestMapping(value="/download.do", method=RequestMethod.GET)
public void processDownload(HttpServletRequest request,HttpServletResponse response
, ModelMap modelMap) {
long userId = getUserId(request);
String ids = request.getParameter("ids");
try {
Long[] idarray = getIdsFromStringArray(ids.split(","));
if (null == idarray || 0 == idarray.length) {
return;
}
// 直接往response的输出流中写excel
OutputStream outputStream = response.getOutputStream();
// 获取文件名称
String fileName = getUserFileName(userId);
// 下载格式设置
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=/"" + fileName + "/"");
// 读取数据渲染模板并写入outputstream中
List<PhAdvertiseOrderDO> advertiseOrderList = phAdvertiseOrderService.getAdvertiseOrderByIds(idarray, userId);
outputStream = excelFileService.generalExcelFileInOutputStream(outputStream, advertiseOrderList);
outputStream.close();
} catch (Exception e) {
logger.error("下载报表发生异常!", e);
}
}
其中调用到的文件服务
/* (non-Javadoc)
* @see com.netease.photography.service.ExcelFileService#generalExcelFileInOutputStream(java.lang.String, java.io.OutputStream, java.util.List)
*/
public OutputStream generalExcelFileInOutputStream(OutputStream outputStream, List<PhAdvertiseOrderDO> advertiseOrderList) throws BiffException, IOException, WriteException {
// 检查参数是否合法
checkParam(tempalteFile,"no File",advertiseOrderList);
// 获取模板
Workbook templatebook = Workbook.getWorkbook(new File(tempalteFile));
WritableWorkbook writeableWorkbook = Workbook.createWorkbook(outputStream, templatebook);
// 读取数据写入模板
readDataAndWriteTemplate(templatebook, writeableWorkbook, advertiseOrderList);
return outputStream;
}
其中的重点就在于
WritableWorkbook writeableWorkbook = Workbook.createWorkbook(outputStream, templatebook);
这句话指定了写入的数据到输出流中。
页面调用很简单
function getOrderFileNoDirect() {
var ids ="";
for(var i=0;i<30;i++){
if($("choose"+i) != null && $("choose"+i).checked == true) {
ids += $("choose"+i).value;
ids += ",";
}
}
if(ids==""){
alert('不能建立空报表!');
return;
}
window.open("download.do?ids="+ids);
}
分享到:
相关推荐
Java使用JXL库生成Excel文件是一项常见的任务,特别是在数据处理、报表生成或导出时。JXL是一个开源的Java库,允许我们读取、写入和修改Excel文件。以下将详细讲解如何使用JXL库来生成Excel文件。 首先,我们需要在...
在Java开发中,生成和处理Excel文件是一项常见的任务,特别是在数据导出或报表生成的场景。JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel...
"jxl模版生成excel" 指的是使用JExcelAPI(简称jxl)这个Java库来创建基于模板的Excel文件。JExcelAPI是一个开源项目,允许程序开发者读写Microsoft Excel文件,它支持从Java数据结构直接导出到Excel格式,同时也可...
总的来说,"利用Jxl生成excel文件"这个主题涵盖了Java环境下使用Jxl库进行Excel操作的基本知识,包括创建工作簿、工作表,添加数据,设置样式,以及读写文件的流程。对于需要在Java应用程序中生成Excel报告或导出...
总的来说,`jxl`库为Java开发者提供了一种简单而实用的方式来处理Excel文件,特别适合那些需要在后端生成Excel报告或者与Excel交互的应用场景。通过熟练掌握其API,可以实现高效的数据导入导出和报表生成。
利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类
这篇博客文章结合了这两个技术,展示了如何在Struts2应用中生成Excel文件并将其导出给用户下载。 在Java开发中,导出数据到Excel是常见的需求,特别是在处理大量结构化数据时,如报表或数据分析。JXL库提供了一个...
在Java编程环境中,处理Excel文件是一项常见的任务,特别是在数据分析、数据导入导出或者报表生成等场景。`jxl`库是Java中一个广泛使用的库,它允许开发者方便地读取和写入Excel文件(.xls格式)。本篇将详细介绍...
通过以上步骤,我们可以实现在Java程序中使用JXL和POI库给Excel文件添加动态水印的功能。这种技术不仅适用于企业内部的文档管理,还可以用于任何需要保护文档版权和安全性的场景。希望这篇教程能够帮助到有类似需求...
在Java编程环境中,生成Excel报表是一项常见的任务,尤其在数据处理和数据分析中。Apache POI 和 JExcelAPI(JXL)是两个广泛使用的库,分别用于处理Microsoft Office的POI格式(包括Excel)和Java环境中的Excel文件...
自己封装的方法,调用 XlHelper.getXl(List<?> voList , Object head , OutputStream ops)方法,直接返回需要的excel,而不需要再去写jxl的方法。第一个参数voList 是excel里的内容,第二个参数head是excel表头。第...
总之,JXL是Java开发中处理Excel文件的一个强大工具,它简化了与Excel文件交互的过程,使开发者能够高效地进行数据导入导出、报表生成等工作。结合提供的API文档和示例,你将能够轻松地掌握如何使用JXL来满足各种...
本资源提供了一个利用jxl库实现Java程序中生成Excel表格的解决方案。jxl是一个广泛使用的开源Java库,它允许开发者读取、写入和修改Microsoft Excel文件。 首先,我们来详细了解一下jxl库。jxl库支持多种Excel操作...
在Java中,读取和操作Excel文件是常见的需求,这通常涉及到使用库,如Apache POI和JXL。这两个库都允许开发者在Java中方便地读取、写入和修改Excel文件。 Apache POI是一个强大的库,专门用于处理Microsoft Office...
总的来说,JXL库为Java开发者提供了一套全面的工具,使他们能够方便地在应用程序中集成Excel文件处理功能。无论是简单的数据导入导出,还是复杂的报告生成,JXL都能提供足够的灵活性和性能。在Test.java文件中,你...
在JXL中,结合EL表达式,我们可以动态地生成Excel内容,这使得在模板基础上生成复杂的数据报告变得非常便捷。 **步骤1:准备Excel模板** 首先,你需要创建一个Excel模板文件,这个模板包含你想要在生成的Excel中...
JXL是一个Java库,专门用于读取、写入和修改Excel文件,它为Java开发者提供了一种方便的方式来处理Excel数据,而无需依赖Microsoft Office套件。本篇文章将深入探讨JXL库在操作Excel和数据库导出Excel文件方面的应用...
Java通过JXL库生成Excel文档是一项常见的任务,尤其在数据导出、报表生成等领域非常实用。JXL是一个Java API,允许我们读写Microsoft Excel文件,而无需依赖Microsoft Office。在这个过程中,我们可以创建新的工作簿...
在java开发中,通过jxl.jar提供的api可以方便的生成你想要的excel文件。
这篇博客“JXL 下载 Excel 文档”可能是介绍如何使用JXL库在Java程序中创建、读取或修改Excel文件。 描述中提到的链接指向了一个ITEYE博客文章,虽然具体内容没有给出,但我们可以推测博主可能详细介绍了使用JXL库...