普元nui:导出Excel

JSP

window.location = appContext + "/syzcdDksqxxb/export.do?parameter=" + JSON.stringify(form.getData());
		}

contro

public void export(SyzcdDksqxxbVO vo, HttpServletResponse response, HttpServletRequest request) throws IOException {
		logger.info("导出");
		String message = "导出失败";
		String parameter = request.getParameter("parameter");
		vo = JSONObject.parseObject(parameter, SyzcdDksqxxbVO.class);
		List<SyzcdDksqxxbVO> list = iSyzcdDksqxxbService.queryShow(vo);
		if (list.size() == 0) {
			message = "没有需要导出的信息";
		}
		// 保存数据
		List<String[]> dataList = new ArrayList<>();
		for (SyzcdDksqxxbVO listEach : list) {
			String[] dataArr = listEach.getData().split(",");
			dataList.add(dataArr);
		}
		// 导出文件名称
		String title = "贷款申请信息文件明细表";
		String date = DateUtil.getDate();
		String fileName = title + date + ".xls";
		// 表头,格式:[projectid=-3f21ad94.155a4d67453.-7cc5, planitemid=-3f21ad94.155a2267453.-7cc5, contractid=171100000992, applyid=fffffff, supplierid=10013513, suppliername=沈阳xxx有限公司, bankname=银行名称, accountname=, accountnumber=, receiveaccaname=, receiveaccno=, contactname=test, contactphone=183xxxxxxxx, confirmamount=1000, fristintime=20191205, lastuptime=20191211, byzd1=, byzd2=, byzd3=, byzd4=, byzd5=]
		String[] header = {"项目id", "包组id", "合同id", "申请id", "供应商id", "供应商名称", "开户行", "开户人名称(回款卡)", "开户账号(回款卡)", "开户人名称(贷款卡)", "开户账号(贷款卡)", "供应商联系人姓名", "供应商联系电话", "供应商确认金额",
				"首次登记时间", "最后更新时间", "贷款额度", "备注说明", "拒绝原因", "供应商中标金额", "备用5"};
		try {
			message = new Export().Export(response, fileName, title, header, dataList);
			response.setContentType("text/html;charset=UTF-8");
		} catch (Exception e) {
			e.printStackTrace();
			message = "信息写入Excel失败";
		} finally {
		}
	}

Excel

public class Export {
	public String Export(HttpServletResponse response, String fileName,String title, String[] header, List<String[]> dataList) throws Exception {
		int loanNum = 0;// 贷款总额
		
		OutputStream os = response.getOutputStream();// 取得输出流
		response.reset();// 清空输出流
		fileName = URLEncoder.encode(fileName, "ISO-8859-1");
		 fileName = URLEncoder.encode(fileName, "ISO-8859-1");
		// 定义输出类型(下载)
		response.setHeader("Content-disposition", "attachment; filename=ApplInfo"+DateUtil.getDate());// 设定输出文件头
		response.setContentType("application/msexcel");// 定义输出类型
		// 创建可以写入的Excel工作薄(默认运行生成的文件在tomcat/bin下 )
		WritableWorkbook wwb = Workbook.createWorkbook(os);
		int length = dataList.size(); // 查询结果记录数
		// 设置每个sheet显示的记录数
		int sheetSize = 5000;
		// 有多少个sheet
		int sheetNum = 1;
		// 计算要创建的sheet个数
		if (length % sheetSize > 0) {
			sheetNum = length / sheetSize + 1;
		} else {
			sheetNum = length / sheetSize;
		}
		for (int kk = 0; kk < sheetNum; kk++) {
			// 生成工作表,(name:First Sheet,参数0表示这是第一页)
			WritableSheet sheet = wwb.createSheet(("sheet" + (kk + 1)), kk);
			// 设置excel标题
			sheet.mergeCells(0, 0, header.length - 1, 0); // 为表头合并单元格
			// sheet.mergeCells(0, 1, 1, 1);
			WritableFont wfont = new WritableFont(WritableFont.createFont("宋体"), 20, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.GREEN);
			WritableCellFormat wcfFC = new WritableCellFormat(wfont);
			wcfFC.setAlignment(Alignment.CENTRE); // 设置对齐方式
			sheet.addCell(new Label(0, 0, title, wcfFC));
			sheet.setRowView(0, 600);// 将第一行的高度设为600
			// 设置header样式(楷体_GB2312)
			WritableFont headerfont = new WritableFont(WritableFont.createFont("黑体"), 11, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLUE);
			WritableCellFormat headerCell = new WritableCellFormat(headerfont);
			headerCell.setAlignment(Alignment.CENTRE); // 设置对齐方式
			// 开始写入header
			for (int i = 0; i < header.length; i++) {
				// 用于写入文本内容到工作表中去
				Label label = null;
				// 列名字位置
				// 在Label对象的构造中指明单元格位置(参数依次代表列数、行数、内容、样式)
				label = new Label(i, 2, header[i], headerCell);
				// 将定义好的单元格添加到工作表中
				sheet.setColumnView(i, 18);// 设置宽度21
				sheet.addCell(label);
			}
			// 设置数据样式(楷体_GB2312)
			WritableFont valuefont = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
			WritableCellFormat valueCell = new WritableCellFormat(valuefont);
			valueCell.setAlignment(Alignment.CENTRE); // 设置对齐方式
			// 开始写入数据,sheetSize为每个SHEEET页总行数
			// for (int i = kk * sheetSize; i < (kk + 1) * sheetSize; i++) {
			for (int i = kk * sheetSize; i < dataList.size() - 1; i++) {
				if (i < length) {
					String[] dataArr = dataList.get(i);
					for (int col = 0; col < dataArr.length; col++) {
						// 获取数据
						String colDate = "";
						// 若=是最后一位,那么将返回""
						String data = dataArr[col].substring(dataArr[col].indexOf("=") + 1, dataArr[col].length());
						// null数据会以字符串的形式出现在dataArr中
						if (!data.equals("null")) {
							colDate = data;
							// 获取贷款额度
							if (col == dataArr.length - 5&& StringUtils.isNotBlank(data)) {
								loanNum += Integer.valueOf(data);
							}
						}
						// 定义格式
						Label labelDate = null;
						labelDate = new Label(col, i + 3 - (kk * sheetSize), colDate, valueCell);
						sheet.addCell(labelDate);
					}
				} else {
					break;
				}
			}
			// 报表日期位置
			// sheet.mergeCells(0, 1, header.length - 1, 1); // 为报表日期合并单元格
			Label label = null;
			String params = "日期:" +  DateUtil.getDate();
			params += "——总笔数:" + dataList.size();
			params += "——";
			params += "贷款总额:" + loanNum;
			label = new Label(2, 1, params, headerCell);
			sheet.addCell(label);
		}
		wwb.write();
		// 关闭文件
		wwb.close();
		// 关闭输出流
		os.close();
		return "导出共" + dataList.size() + "条信息";
	}
}
发布了123 篇原创文章 · 获赞 54 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_36750352/article/details/103147986