导出 到 excel

本文详细介绍了使用Java进行Excel导出的方法,包括如何构建Excel工作簿、设置单元格样式、循环填充数据,以及处理不同浏览器的文件下载兼容性。通过具体代码示例,展示了从Action到Service层的完整导出流程。

导出方法:

--Action中方法通用

--Action
public void exportManage(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
		//获取参数
		JSONObject params = LocalWebUtils.convertRequestParameters2JSONObject(request);
		try {
			//导出后的文件名称
			String docName = "JAG报表";
			//获取session中的路径
			String path = request.getSession().getServletContext().getRealPath("/");
			//拼接路径
			path += "/excelTemplates/capitalExpendManage.xlsx";
			//
			response.reset();
			response.setContentType("application/application/msexcel");
			response.setCharacterEncoding("UTF-8");
			//
			if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
				docName = new String(docName.getBytes(), "ISO-8859-1");
				response.setHeader("Content-Disposition", "attachment; filename=" + docName + ".xlsx");
			} else {
				docName = java.net.URLEncoder.encode(docName, "UTF-8");
				response.setHeader("Content-Disposition", "attachment; filename=" + docName + ".xlsx");
			}
			//修改路径
			if (File.separatorChar == '/') {
				path = StringUtils.replace(path, "\\", "/");
				path = StringUtils.replace(path, "//", "/");
			} else {
				path = StringUtils.replace(path, "/", "\\");
				path = StringUtils.replace(path, "\\\\", "\\");
			}
			params.element("filepath", path);
			//调用 导出方法
			Workbook book = this.service.export(params);
			//调用流,写入excel中
			book.write(response.getOutputStream());
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
    } 
		//获取参数
		JSONObject params = LocalWebUtils.convertRequestParameters2JSONObject(request);
		try {
			//导出后的文件名称
			String docName = "JAG报表";
			//获取session中的路径
			String path = request.getSession().getServletContext().getRealPath("/");
			//拼接路径
			path += "/excelTemplates/capitalExpendManage.xlsx";
			//
			response.reset();
			response.setContentType("application/application/msexcel");
			response.setCharacterEncoding("UTF-8");
			//
			if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
				docName = new String(docName.getBytes(), "ISO-8859-1");
				response.setHeader("Content-Disposition", "attachment; filename=" + docName + ".xlsx");
			} else {
				docName = java.net.URLEncoder.encode(docName, "UTF-8");
				response.setHeader("Content-Disposition", "attachment; filename=" + docName + ".xlsx");
			}
			//修改路径
			if (File.separatorChar == '/') {
				path = StringUtils.replace(path, "\\", "/");
				path = StringUtils.replace(path, "//", "/");
			} else {
				path = StringUtils.replace(path, "/", "\\");
				path = StringUtils.replace(path, "\\\\", "\\");
			}
			params.element("filepath", path);
			//调用 导出方法
			Workbook book = this.service.export(params);
			//调用流,写入excel中
			book.write(response.getOutputStream());
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
    } 

--service中

public Workbook export(JSONObject params);

--serviceImpl

(1)构建book

(2)设置样式

(3)循环数据

static String[] exportSummaryHeader = new String[]{ "row" , "name" , "orderMoney" , "recMoney" , "rate" };

 

public Workbook export(JSONObject params) {
		Project project = entityManager.get(Project.class, params.getLong("projectId"));
		//构建book
		XSSFWorkbook book;
		try {
			book = new XSSFWorkbook(new FileInputStream(params.getString("filepath")));
		} catch (Exception ex) {
			log.error(ex.getMessage(), ex);
			throw new BusinessException("导出报错:" + ex.getMessage());
		}
		
		//设置样式
		XSSFFont font = book.createFont();
		font.setFontHeightInPoints((short) 10);
		font.setFontName("Arial");
		XSSFCellStyle unassignedStyle = book.createCellStyle();
		unassignedStyle.setFont(font);
		unassignedStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
		unassignedStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		unassignedStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		unassignedStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
		unassignedStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
		unassignedStyle.setWrapText(true);
		//循环数据
		List dataList = new ArrayList();
		if(params.getString("type").equals("supplier")){
			dataList = this.findPurchaseSupplierList(project);
		}else{
			dataList = this.findPurchaseOrgList(project);
		}
		
		//数据总数
		if (dataList != null && dataList.size() > 0) {
			//获取第一个sheet
			XSSFSheet sheet;
			sheet = book.getSheetAt(0);		
			//数据的写入从 第2行开始
			int begin = 1;
			//循环数据
			for(int i = 0 ; i < dataList.size() ; i++){
				//创建行
				XSSFRow row = sheet.createRow(begin+i);
				//定义单元格
				XSSFCell cell = null;
				//单元格所在的行
				int j = 0 ; 
				//循环表头,根据表头查数据
				for(String key : exportSummaryHeader ){
					//获取数据
					JSONObject itemData = (JSONObject) dataList.get(i);
					//添加单元格
					cell = row.createCell(j);
					//设置单元格格式
					cell.setCellStyle(unassignedStyle);
					if (key.equals("row")) {
						//生成序号
						cell.setCellValue(i + 1);
					} else {
						//添加值
						cell.setCellValue(itemData.containsKey(key) ? itemData.getString(key) : "");
					}
					j++;
				}				
			}
		}
		return book;
	}

 

end

 

 

 

 

 

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值