Java-导出数据post方式

需求

需求:使用get方式由于数据头数据量过多,因此改为Post请求。

前端代码

FreeMarker

   <li><a id="collector" class="collector" href="javascript:void(0)" onclick="expoit('${basePath}','${navTabId}')"><span>导出数据</span></a></li>

JavaScript

<script>
    function expoit(local,id) {
        var navTabId = id;
        var boxs = $("input[type='checkbox'][id^='box_']");
        var check_val = [];
        for(var k in boxs){
            if(boxs[k].checked){
                check_val.push(boxs[k].value);
            }
        }
        var ids = check_val.join(',');
        var data = {
            navTabId : navTabId,
            ids : ids
        }
        console.log(data);
        var url = local + "/export.do";
        DownLoadFile({url:url,data:data});
    }

    var DownLoadFile = function (options) {
        var config = $.extend(true, { method: 'post' }, options);
        var $iframe = $('<iframe id="down-file-iframe" />');
        var $form = $('<form target="down-file-iframe" method="' + config.method + '" />');
        $form.attr('action', config.url);
        for (var key in config.data) {
            $form.append('<input type="hidden" name="' + key + '" value="' + config.data[key] + '" />');
        }
        $iframe.append($form);
        $(document.body).append($iframe);
        $form[0].submit();
        $iframe.remove();
    };
</script>

后端代码

Java

	@RequestMapping(value = "export", method = RequestMethod.POST)
	public void export(HttpServletRequest request, HttpServletResponse response) {
		PrintWriter printWriter = null;
		try {
			printWriter = response.getWriter();
			String ids = request.getParameter("ids");
			List<CompanyInfo> companyInfoList =  ((CompanyInfoService) this.baseService).findCompanyListByIds(ids.split(","));
			String datePath = DateFormatUtils.format(new Date(), "yyyyMM");
			String fileSavePath = Conf.FILE_BASE_PATH + Conf.FILE_SAVE_PATH + datePath + "/";
			String fileName = DateFormatUtils.format(new Date(), "yyyyMMdd")
					+ String.valueOf(Calendar.getInstance().getTimeInMillis()).substring(7) + ".xls";
			// 生成文件
			File dirPath = new File(fileSavePath);
			if (!dirPath.exists()) {
				dirPath.mkdirs();
			}
			if (this.generateExcel(fileSavePath, fileName, companyInfoList)) {
				// "生成企业数据汇总统计表.xls";
				if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {
					fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");// firefox浏览器
				} else if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
					fileName = URLEncoder.encode(fileName, "UTF-8");// IE浏览器
				}
				response.reset();
				response.setContentType("application/octet-stream");
				response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
				response.setHeader("Connection", "close");
				String fullFileName = fileSavePath + fileName;
				InputStream in = new FileInputStream(fullFileName);
				OutputStream out = response.getOutputStream();
				// 写文件
				int b;
				while ((b = in.read()) != -1) {
					out.write(b);
				}
				in.close();
				out.close();
			} else {
				printWriter.write(new JsonResultDwzModel(DwzStatusCode.FAILURE.getDesc(), "导出Excel文件操作失败。",
						request.getParameter("navTabId"), "").toJsonString());
			}
			printWriter.flush();
		} catch (Exception e) {
			Log.e(e.getMessage(), e);
			printWriter.write(new JsonResultDwzModel(DwzStatusCode.FAILURE.getDesc(), "系统繁忙,请稍候再试。",
					request.getParameter("navTabId"), "").toJsonString());
		} finally {
			if (printWriter != null) {
				printWriter.close();
			}
		}
	}
-------------------------------------------------------------------------------------------------------------------

GenerateExcel

	private boolean generateExcel(String fileSavePath, String fileName, List<CompanyInfo> list) {

		// 创建工作簿对象
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 创建工作表对象并命名
		HSSFSheet sheet = workbook.createSheet(BusinessUtil.toDate(new Date(), "yyyy年MM月dd日") + "会员数据汇总统计表");
		sheet.setDefaultColumnWidth(20);
		// 设置表格单元格样式模板
		HSSFCellStyle cellStyle = workbook.createCellStyle();
		cellStyle.setWrapText(true);// 设置自动换行
		cellStyle.setAlignment((short) 2);
		cellStyle.setVerticalAlignment((short) 1);
		cellStyle.setBorderTop(HSSFBorderFormatting.BORDER_THIN);
		cellStyle.setBorderBottom(HSSFBorderFormatting.BORDER_THIN);
		cellStyle.setBorderLeft(HSSFBorderFormatting.BORDER_THIN);
		cellStyle.setBorderRight(HSSFBorderFormatting.BORDER_THIN);

		Font font = workbook.createFont();
		font.setFontHeightInPoints((short) 10);
		font.setFontName("宋体");
		font.setColor(HSSFColor.BLACK.index);
		cellStyle.setFont(font);

		// 创建标题合并单元格
		HSSFRow row = sheet.createRow(0);
		HSSFCell titleCell = row.createCell(0);
		titleCell.setCellStyle(cellStyle);
		titleCell.setCellValue(BusinessUtil.toDate(new Date(), "yyyy年MM月dd日") + "企业数据汇总统计表");
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 12));

		// 创建字段信息表头
		row = sheet.createRow(1);
		row.setHeight((short) 500);
		HSSFCell headerCell0 = row.createCell(0);
		headerCell0.setCellStyle(cellStyle);
		headerCell0.setCellValue("名称");

		HSSFCell headerCell1 = row.createCell(1);
		headerCell1.setCellStyle(cellStyle);
		headerCell1.setCellValue("姓名");

		HSSFCell headerCell2 = row.createCell(2);
		headerCell2.setCellStyle(cellStyle);
		headerCell2.setCellValue("账户");

		HSSFCell headerCell3 = row.createCell(3);
		headerCell3.setCellStyle(cellStyle);
		headerCell3.setCellValue("状态");

	    ...
	    
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 遍历集合对象创建行和单元格数据
		for (int i = 0; i < list.size(); i++) {
			// 取出数据对象
			CompanyInfo s = list.get(i);
			// 创建数据行
			row = sheet.createRow(i + 2);
			// 开始创建单元格并赋值
			HSSFCell dataCell0 = row.createCell(0);
			dataCell0.setCellStyle(cellStyle);
			dataCell0.setCellValue(s.实例);

			HSSFCell dataCell1 = row.createCell(1);
			dataCell1.setCellStyle(cellStyle);
			dataCell1.setCellValue(s.实例);
			
            ...
		}

		// 生成文件
		File dirPath = new File(fileSavePath);
		if (!dirPath.exists()) {
			dirPath.mkdirs();
		}

		File file = new File(fileSavePath + fileName);
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(file);
			workbook.write(fos);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (fos != null) {
				try {
					fos.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return false;
	}
-------------------------------------------------------------------------------------------------------------------

Alt

Mon 07 Mon 14 Mon 21 已完成 进行中 计划一 计划二 现有任务 ...
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在uniapp中使用Java easyexcel导出Excel: 1. 在Java中编写导出Excel的代码,并将其打包成jar包或war包。 2. 在uniapp中使用axios或其他网络请求库将数据发送到Java后端。 3. 在Java后端中解析数据,使用easyexcel生成Excel文件,并将其返回给uniapp前端。 4. 在uniapp前端中使用js-xlsx或其他Excel解析库解析Excel文件,以便在前端进行处理。 以下是一个简单的Java代码示例,用于将数据导出到Excel文件中: ```java public void exportExcel(HttpServletResponse response) throws IOException { List<User> userList = userService.getUserList(); // 设置表头 List<List<String>> head = new ArrayList<>(); List<String> head0 = new ArrayList<>(); head0.add("编号"); head0.add("姓名"); head0.add("年龄"); head.add(head0); // 设置表格数据 List<List<Object>> data = new ArrayList<>(); for (User user : userList) { List<Object> row = new ArrayList<>(); row.add(user.getId()); row.add(user.getName()); row.add(user.getAge()); data.add(row); } // 导出Excel文件 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=user.xlsx"); ServletOutputStream out = response.getOutputStream(); EasyExcel.write(out).head(head).sheet("用户数据").doWrite(data); } ``` 在uniapp中,您可以使用以下代码将数据发送到Java后端: ```javascript exportExcel() { axios.post('/api/exportExcel', this.userList) .then(response => { let blob = new Blob([response.data], {type: 'application/vnd.ms-excel'}) let link = document.createElement('a') link.href = URL.createObjectURL(blob) link.download = 'user.xlsx' link.click() }) } ``` 在上面的代码中,我们使用axios将用户列表发送到Java后端的/api/exportExcel接口。后端接口将生成Excel文件并将其作为响应返回。在前端,我们使用Blob和URL.createObjectURL将响应数据转换为Excel文件,并使用a标签模拟点击以下载文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值