`
yelr_j
  • 浏览: 67509 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

B/S中实时导出excel

阅读更多

最近的项目中有个导出excel的需求,由于导出excel的源数据是在动态变化的,而且业务上要求导出excel后便不能允许在导出了,因此考虑直接生成输出流的方式保存到客户端中。该项目的框架是ssh,导出excel的代码也放在了action与service中。

action中的代码:

public void exportExcel(ActionMapping mapping,ActionForm form,
			HttpServletRequest request,HttpServletResponse response)
			throws Exception {
		String ids = request.getParameter("ids");
		String[] sid = ids.split(",");
		OutputStream os = response.getOutputStream();//取得输出流
		response.reset();//清空输出流
		response.setContentType("application/xls;charset=GB2312");//定义输出类型
	  	response.setHeader("Content-disposition", "attachment; filename=applyList.xls");//设定输出文件头
	    WritableWorkbook wbook = procurementApplyPoolService.exportExcel(sid, os);
		wbook.write(); //写入文件
		response.flushBuffer();//刷新
		wbook.close();
		os.close();
		procurementApplyPoolService.setExportFlag(sid);				
	}

 该action没有返回值,因为导出excel后不需要刷新页面。

service中的代码:

public WritableWorkbook exportExcel(String[] ids,OutputStream os) throws Exception {
		List modelList = new ArrayList();
		List dtoList = null;
		for(int i=0;i<ids.length;i++){
			modelList.add(this.getHibernateTemplate().get(MpsProcurementApplyDetail.class, new Long(ids[i])));
		}
		dtoList = procurementApplyDetailService.buildDtoList(modelList);
		
		WritableWorkbook wbook = Workbook.createWorkbook(os); //建立excel文件
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = new Date();
		WritableSheet wsheet = wbook.createSheet(sdf1.format(date)+" 采购清单", 0); //创建Excel工作表
		ProcurementApplyDetailDto dto;
		Label   label;
		/*********************设置excle中的头行*****************/
		WritableFont wfc = new WritableFont(WritableFont.ARIAL, 25,
				WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
				jxl.format.Colour.BLACK);
		WritableCellFormat wcfFc = new WritableCellFormat(wfc);
		wcfFc.setAlignment(jxl.write.Alignment.CENTRE);//水平居中
		label = new Label(0, 0, "采购清单", wcfFc);
		wsheet.addCell(label);
		/**********************设置标题************************/
		WritableFont wfc1 = new WritableFont(WritableFont.ARIAL, 12,
				WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
				jxl.format.Colour.BLACK);
		WritableCellFormat wcfFc1 = new WritableCellFormat(wfc1);
		wcfFc1.setBackground(Colour.GRAY_25);//设置背景色
		wcfFc1.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中
		wcfFc1.setAlignment(jxl.write.Alignment.CENTRE);
		wcfFc1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);//设置细边框 
		label = new Label(0, 1, "请购编号",wcfFc1);//请购编号
		wsheet.addCell(label);
		label = new Label(1, 1, "请购单位",wcfFc1);//请购单位
		wsheet.addCell(label);
		label = new Label(2, 1, "请购人",wcfFc1);//请购人
		wsheet.addCell(label);
		label = new Label(3, 1, "产品名称",wcfFc1);//产品名称
		wsheet.addCell(label);
		label = new Label(4, 1, "产品配置描述",wcfFc1);//产品配置描述
		wsheet.addCell(label);
		label = new Label(5, 1, "规格型号",wcfFc1);//规格型号
		wsheet.addCell(label);
		label = new Label(6, 1, "型号描述",wcfFc1);//型号描述
		wsheet.addCell(label);
		label = new Label(7, 1, "批次号",wcfFc1);//批次号
		wsheet.addCell(label);
		label = new Label(8, 1,  "数量",wcfFc1);//数量
		wsheet.addCell(label);
		label = new Label(9, 1, "计量单位",wcfFc1);//计量单位
		wsheet.addCell(label);
		label = new Label(10, 1, "地市配额",wcfFc1);//地市配额
		wsheet.addCell(label);
		label = new Label(11, 1, "费用列支",wcfFc1);//费用列支
		wsheet.addCell(label);
		label = new Label(12, 1, "项目类型",wcfFc1);//项目类型
		wsheet.addCell(label);
		label = new Label(13, 1, "供应商",wcfFc1);//供应商
		wsheet.addCell(label);
		label = new Label(14, 1, "项目名称",wcfFc1);//项目名称
		wsheet.addCell(label);
		label = new Label(15, 1, "项目编码",wcfFc1);//项目编码
		wsheet.addCell(label);
		label = new Label(16, 1, "收货方",wcfFc1);//收货方
		wsheet.addCell(label);
		label = new Label(17, 1, "接收组织",wcfFc1);//接收组织
		wsheet.addCell(label);
		label = new Label(18, 1, "库存组织",wcfFc1);//库存组织
		wsheet.addCell(label);
		label = new Label(19, 1, "到货日期",wcfFc1);//到货日期
		wsheet.addCell(label);
		label = new Label(20, 1, "收货人",wcfFc1);//收货人
		wsheet.addCell(label);
		label = new Label(21, 1, "联系方式",wcfFc1);//联系方式
		wsheet.addCell(label);
		label = new Label(22, 1, "交货地点",wcfFc1);//交货地点
		wsheet.addCell(label);
		label = new Label(23, 1, "使用(安装)地点",wcfFc1);//使用(安装)地点
		wsheet.addCell(label);
		label = new Label(24, 1, "属性",wcfFc1);//属性
		wsheet.addCell(label);
		wsheet.setRowView(1, 400);//设置行高
		/**********************设置内容************************/
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		WritableFont wfc2 = new WritableFont(WritableFont.ARIAL, 10,
				WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
				jxl.format.Colour.BLACK);
		WritableCellFormat wcfFc2 = new WritableCellFormat(wfc2);
		wcfFc2.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直居中
		wcfFc2.setAlignment(jxl.write.Alignment.CENTRE);
		wcfFc2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);//设置细边框
		for(int i=0;i<dtoList.size();i++){
			dto = (ProcurementApplyDetailDto)dtoList.get(i);
			label = new Label(0, i+2, dto.getApplyCode(),wcfFc2);//请购编号
			wsheet.addCell(label);
			label = new Label(1, i+2, dto.getCreaterunitname(),wcfFc2);//请购单位
			wsheet.addCell(label);
			label = new Label(2, i+2, dto.getCreatername(),wcfFc2);//请购人
			wsheet.addCell(label);
			label = new Label(3, i+2, dto.getProductname(),wcfFc2);//产品名称
			wsheet.addCell(label);
			label = new Label(4, i+2, dto.getConfiguration(),wcfFc2);//产品配置描述
			wsheet.addCell(label);
			label = new Label(5, i+2, dto.getMaterialname(),wcfFc2);//规格型号
			wsheet.addCell(label);
			label = new Label(6, i+2, dto.getMaterialproperty(),wcfFc2);//型号描述
			wsheet.addCell(label);
			label = new Label(7, i+2, dto.getBatchnumber(),wcfFc2);//批次号
			wsheet.addCell(label);
			Long amount = dto.getAmount()==null?new Long(0):dto.getAmount();
			label = new Label(8, i+2,  amount.toString(),wcfFc2);//数量
			wsheet.addCell(label);
			label = new Label(9, i+2, dto.getUnits(),wcfFc2);//计量单位
			wsheet.addCell(label);
			label = new Label(10, i+2, dto.getCompanyQuota(),wcfFc2);//地市配额
			wsheet.addCell(label);
			label = new Label(11, i+2, dto.getExpendname(),wcfFc2);//费用列支
			wsheet.addCell(label);
			label = new Label(12, i+2, dto.getProjecttype(),wcfFc2);//项目类型
			wsheet.addCell(label);
			label = new Label(13, i+2, dto.getProvidername(),wcfFc2);//供应商
			wsheet.addCell(label);
			label = new Label(14, i+2, dto.getProjectname(),wcfFc2);//项目名称
			wsheet.addCell(label);
			label = new Label(15, i+2, dto.getProjectcode(),wcfFc2);//项目编码
			wsheet.addCell(label);
			label = new Label(16, i+2, dto.getShiptolocation(),wcfFc2);//收货方
			wsheet.addCell(label);
			label = new Label(17, i+2, dto.getOrganizationname(),wcfFc2);//接收组织
			wsheet.addCell(label);
			label = new Label(18, i+2, dto.getWarehousename(),wcfFc2);//库存组织
			wsheet.addCell(label);
			if(dto.getArrivedate() == null){
				label = new Label(19, i+2, "",wcfFc2);//到货日期
			}else{
				label = new Label(19, i+2, sdf.format(dto.getArrivedate()),wcfFc2);//到货日期
			}
			wsheet.addCell(label);
			label = new Label(20, i+2, dto.getReceivername(),wcfFc2);//收货人
			wsheet.addCell(label);
			label = new Label(21, i+2, dto.getPhone(),wcfFc2);//联系方式
			wsheet.addCell(label);
			label = new Label(22, i+2, dto.getDeliveryaddress(),wcfFc2);//交货地点
			wsheet.addCell(label);
			label = new Label(23, i+2, dto.getInstalladdress(),wcfFc2);//使用(安装)地点
			wsheet.addCell(label);
			label = new Label(24, i+2, dto.getProperty(),wcfFc2);//属性
			wsheet.addCell(label);
			wsheet.setRowView(i+2, 350);
		}
		wsheet.mergeCells(0, 0, 24, 0);//合并单元格
		return wbook;
	}

 这个功能任然存在着问题,就是导出excel的中问文件名的问题。使用中文后总是下载不了。由于action没有返回值,在页面中进行其他刷新页面的处理时需要给from的action重新赋值,不然不论做其他刷新操作都会访问导出excel的action方法。

分享到:
评论

相关推荐

    利用com组件导出excel方法

    string[] letterList = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; // 写入表头 for (int i = 0; i ; i++) {...

    asp.net利用excel实现打印预览、导出excel文档功能函数

    本文将深入探讨如何利用Excel来实现在C/S(客户端/服务器)和B/S(浏览器/服务器)模式下进行打印预览和导出Excel文档的功能。 首先,`OprationExcel.cs` 文件可能包含了一组操作Excel的核心方法,用于创建、读取或...

    B/S版的Excel报表收集及统计程序.

    10.软件采用B/S结构,适用于局域网和广域网。只在一服务器端安装,其它用户只要用IE就可使用本系统,安装维护方便。 11.支持模板导入和模板导出功能。 12.灵活的用户权限管理。 13.可定制按条件删除数据任务。 ...

    ASP_NET导出Excel数据方法总结

    本篇文章将深入探讨几种在ASP.NET环境中导出Excel数据的方法,包括它们的工作原理、优缺点以及适用场景。 #### 方法一:引用COM组件 这种方法通过直接调用Excel COM组件,将数据从DataTable导入至Excel单元格,并...

    学生信息管理系统B/S模式

    5. 报表打印与导出:系统支持将查询结果导出为Excel或PDF格式,方便打印和存档。这通常需要结合服务器端组件或者第三方库来实现。 6. 系统设置:包括数据库连接配置、系统参数设置等功能,确保系统能适应不同环境的...

    SQL定时导出数据到Excel

    在数据库管理和维护过程中,有时我们需要定期将数据库中的数据导出为其他格式,如Excel、Word或Access等,便于进一步的数据分析或者报告制作。本文将详细介绍如何利用SQL Server实现定时任务,将数据自动导出至Excel...

    多Sheet导出excel

    ### 多Sheet导出Excel知识点解析 #### 一、知识点概览 本篇文章将深入解析一个C#程序片段,该程序的功能是实现基于`DataSet`的多Sheet Excel文件导出功能。具体而言,我们将探讨以下几个核心知识点: 1. **如何...

    Lotus_导出到Office_Excel_的函数的完整版本

    本主题聚焦于"Lotus"应用中导出数据到"Office Excel"的完整功能,这涉及到B/S(Browser/Server,浏览器/服务器)和C/S(Client/Server,客户端/服务器)两种架构下的解决方案。下面我们将详细探讨这个过程,以及相关...

    LotusScript导出Excel文件

    B/S模式通过LotusScript直接导出EXCEL文件,文件中只有最重要的输出部分,其余需自行补充完成,其中Head和Sheet样式可以通过Excel录入宏获取

    jsp 导入 excel的例子

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Apache POI则是一个流行的库,专门用于处理Microsoft Office格式的文件,包括Excel。本例子将介绍如何在JSP中利用POI库来实现Excel数据...

    java导出excel文件并且下载到客户端(包括解决中文乱码).txt

    特别是在B/S架构的应用中,用户经常需要将查询结果导出为Excel文件以便进行后续的数据处理或者存档。本文将详细介绍如何使用Java实现将数据导出为Excel文件,并且能够被浏览器正确下载,同时解决中文乱码问题。 ###...

    协同办公b/s用jsp 和servlet写的

    协同办公系统是一个基于Web的B/S(Browser/Server)架构的应用程序,主要目的是提升团队协作效率,实现工作流程自动化。在这个系统中,JSP(JavaServer Pages)和Servlet是核心的技术组件,它们在Java Web开发中起着...

    GridView导出Excel方法

    ### GridView导出Excel方法 #### 一、概述 在日常工作中,经常需要将网页上的数据导出至Excel文件,方便用户进行数据查看或进一步处理。本文档将详细介绍一种使用GridView控件导出数据到Excel的方法,并提供代码...

    C#百万数据导出Demo

    在C#编程中,导出大量数据到Excel是一项常见的任务,尤其在数据分析、报表生成或者数据备份等场景中。本文将深入探讨如何在C#环境中高效地处理百万级别的数据导出,并结合“C#百万数据导出Demo”进行详细解析。 ...

    sql导出不了EXCEL不了解决方案

    ### SQL导出Excel问题解决方案 #### 一、问题概述 在使用SQL进行数据处理时,经常需要将查询结果导出到Excel文件中以便进一步分析或分享。然而,在实际操作过程中,有时会遇到无法将SQL查询结果导出为Excel的情况...

    精典简单vs.NET 下SQL数据库导出/导入Excel

    - **背景介绍**:本文档介绍了一种在 .NET 框架下的 B/S 架构环境中,如何高效地将 GridView 控件中的数据导出到 Excel 文件的方法。此方法的一个显著特点是不需要在服务器端安装 Microsoft Office 套件即可实现数据...

    flex导出excel的代码

    {idx:1, names: "test1", sex: "b" }, {idx:2, names: "test2", sex: "g" } ]; public function doSelect(o:Object):void { Alert.show("行的数据分别是:"+o.idx+"/"+o.names+"/"+o.sex); ...

    Java导入、导出Excel

    Java中的Excel导入与导出是常见的数据处理任务,特别是在企业级B/S系统中。本文将重点介绍两种常用的技术:Jakarta POI和Java Excel,来实现这一功能。 首先,Jakarta POI是一个开源项目,提供了Java API来处理...

Global site tag (gtag.js) - Google Analytics