Java 下载

因为并没有多少数据,下载可简单了,只要用最简单的那种就好了

注意的坑就是1、一个sheet页我通常只留60000行的数据,

2、还有就是注意编码了,小心乱码,比如表名,如果不设置对应编码,下载下来中文名字就消失了。

	public static HSSFWorkbook downloadTemplate(HttpServletResponse response, List<List<ExportMediationDTO>> list, List<String[]> excelHeader, String fileName,
			List<String> sheetName) throws IOException {
		HSSFWorkbook wb = new HSSFWorkbook();

		if (CollectionUtils.isNotEmpty(list) && CollectionUtils.isNotEmpty(excelHeader) && list.size() == excelHeader.size()
				&& excelHeader.size() == sheetName.size()) {
			for (int i = 0; i < list.size(); i++) {
				wb.createSheet();
				wb.setSheetName(i, sheetName.get(i));
				HSSFSheet sheet0 = wb.getSheetAt(i);
				setData(list.get(i), excelHeader.get(i), wb, sheet0);
			}
		}

		response.setContentType("application/vnd.ms-excel");
		fileName = URLEncoder.encode(fileName, "UTF-8");// "GBK","ISO8859_1"
		response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
		OutputStream ouputStream = response.getOutputStream();
		wb.write(ouputStream);
		ouputStream.flush();
		ouputStream.close();
		wb.close();
		return wb;
	}

	public static HSSFWorkbook export(HttpServletResponse response, List<ExportMediationDTO> list, String[] excelHeader, String sheetName) throws IOException {
		HSSFWorkbook wb = new HSSFWorkbook();

		if (list.size() < 65500) {
			wb.createSheet();
			wb.setSheetName(0, sheetName.split("_")[0]);
			HSSFSheet sheet0 = wb.getSheetAt(0);
			setData(list, excelHeader, wb, sheet0);
		} else {
			List<ExportMediationDTO> list0 = list.subList(0, 65500);
			List<ExportMediationDTO> list1 = list.subList(65500, list.size());
			wb.createSheet();
			wb.setSheetName(0, sheetName.split("_")[0]);
			HSSFSheet sheet0 = wb.getSheetAt(0);
			setData(list0, excelHeader, wb, sheet0);
			wb.createSheet();
			wb.setSheetName(1, sheetName.split("_")[0] + 1);
			HSSFSheet sheet1 = wb.getSheetAt(1);
			setData(list1, excelHeader, wb, sheet1);
		}
		response.setContentType("application/vnd.ms-excel");
		// String[] arr = sheetName.split("_");
		sheetName = URLEncoder.encode(sheetName, "UTF-8");// "GBK","ISO8859_1"
		response.setHeader("Content-disposition", "attachment;filename=" + sheetName + ".xls");
		OutputStream ouputStream = response.getOutputStream();
		wb.write(ouputStream);
		ouputStream.flush();
		ouputStream.close();
		wb.close();
		return wb;
	}

	private static void setData(List<ExportMediationDTO> list, String[] excelHeader, HSSFWorkbook wb, HSSFSheet sheet) {

		sheet.setDefaultColumnWidth(15);

		HSSFCellStyle style = wb.createCellStyle();
		style.setAlignment(HorizontalAlignment.CENTER); // 水平布局:居中
		style.setVerticalAlignment(VerticalAlignment.CENTER);
		// 垂直居中
		style.setWrapText(true);
		HSSFRow row = sheet.createRow((int) 0);
		row.setHeight((short) (35 * 20));
		for (int i = 0; i < excelHeader.length; i++) {
			Cell cell = row.createCell(i);
			cell.setCellValue(excelHeader[i]);
			cell.setCellStyle(style);
		}

		for (int i = 0; i < list.size(); i++) {

			ExportMediationDTO emp = list.get(i);
			row = sheet.createRow(i + 1);
			row.setHeight((short) (25 * 20));

			packingsSetCell(style, row, emp);
		}
	}

	private static void packingsSetCell(HSSFCellStyle style, HSSFRow row, ExportMediationDTO emp) {

		setcell(style, row, 0, emp.getZero());

		setcell(style, row, 1, emp.getOne());

		setcell(style, row, 2, emp.getTwo());

		setcell(style, row, 3, emp.getThree());

		setcell(style, row, 4, emp.getFour());

		setcell(style, row, 5, emp.getFive());

		setcell(style, row, 6, emp.getSix());

		setcell(style, row, 7, emp.getSeven());

		setcell(style, row, 8, emp.getEight());

		setcell(style, row, 9, emp.getNine());

		setcell(style, row, 10, emp.getTen());

		setcell(style, row, 11, emp.getEleven());

		setcell(style, row, 12, emp.getTwelve());

		setcell(style, row, 13, emp.getThirteen());

		setcell(style, row, 14, emp.getFourteen());

		setcell(style, row, 15, emp.getFifteen());
	}

	private static Cell setcell(HSSFCellStyle style, HSSFRow row, int i, String type) {
		Cell cell = row.createCell(i);
		cell.setCellStyle(style);
		cell.setCellValue(type);
		return cell;
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值