下载excel里包含多个不同数据的sheet

首先我们先来看效果图,我这个两个sheet是不同数据。
在这里插入图片描述
这就是最终下载出的excel。每个 sheet的数据有自己决定是否可以重复 。
废话不多说 看代码

在这里插入图片描述

public void expchakan(HttpServletRequest request, HttpServletResponse response, AwAuditPointMainDTO dto) throws EncryptedDocumentException {

	try {
		List<AuditDraftTempDTO> listData = getListData(dto);
		ResultUtils.resultzbjg(listData);


		List<SystemManageDTO> colss = new ArrayList<SystemManageDTO>();
		List<SystemManageDTO> colss2 = new ArrayList<SystemManageDTO>();
		
		// 审计项目基本信息
		colss.add(new SystemManageDTO("num", "序号", 2));
		colss.add(new SystemManageDTO("year", "计划年度", 5));
		colss.add(new SystemManageDTO("projectname", "项目名称", 10));
		colss.add(new SystemManageDTO("projectcode", "审计类型", 10));

		// 底稿信息
		colss2.add(new SystemManageDTO("num", "序号", 2));
		colss2.add(new SystemManageDTO("attention", "模型", 5));
		colss2.add(new SystemManageDTO("auditpoints", "模型111", 10));
		colss2.add(new SystemManageDTO("auditmethods", "模型222", 10));


		String datass = new ObjectMapper().writeValueAsString(listData);

		//导出  	name 第一个sheet的名称    name2 为第二个sheet的名称
		exportERiskresult(request, response, "审计项目基本信息", "底稿信息", colss, colss2, datass);
	} catch (Exception e) {
		e.printStackTrace();
	}

}

下面是调用代码 exportERiskresult();

public void exportERiskresult(HttpServletRequest request, HttpServletResponse response, String name,String name2,
								  List<SystemManageDTO> cols, List<SystemManageDTO> colsB,String datas) {
		if (name == null || cols == null || datas == null) {
			return;
		}
		try {
			List<Map<String, Object>> dataList = new ObjectMapper().readValue(datas.replaceAll
					("&quot;", "\""), new TypeReference<List<Map<String, Object>>>() {
			});
			// 声明一个工作薄
			HSSFWorkbook workbook = new HSSFWorkbook();
			
			// 列头的样式
			HSSFCellStyle titleStyle = workbook.createCellStyle(); //Sheet样式
			titleStyle.setFillForegroundColor(HSSFColor.DARK_TEAL.index);  // 前景色的设定
			titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);// 填充模式
			titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
			titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

			//表名单元格样式
			HSSFCellStyle headStyle = workbook.createCellStyle();
			headStyle.setFillForegroundColor(HSSFColor.WHITE.index);
			headStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
			headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
			HSSFFont fontHead = workbook.createFont();
			fontHead.setFontName("宋体");
			fontHead.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体样式(粗体显示)
			fontHead.setFontHeightInPoints((short) 14);//设置字体大小
			headStyle.setFont(fontHead);


			// 另一个字体样式
			HSSFFont font = workbook.createFont();
			font.setColor(HSSFColor.WHITE.index);
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
			titleStyle.setFont(font);

			HSSFCellStyle oddStyle = workbook.createCellStyle();
			oddStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			oddStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			oddStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			oddStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			oddStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

			HSSFCellStyle evenStyle = workbook.createCellStyle();
			evenStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
			evenStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
			evenStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
			evenStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
			evenStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
			evenStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
			evenStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);


			// 生成一个表格
			HSSFSheet sheet = workbook.createSheet(name);

			// 生成第一个sheet
			//产生表格标题行,合并第一行
			HSSFRow rowOne = sheet.createRow(0);
			rowOne.setHeightInPoints(38.25f);
			//参数 1:行号 参数 2:起始列号 参数 3:行号 参数 4:终止列号
			CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, cols.size() - 1);
			sheet.addMergedRegion(cellRangeAddress);
			HSSFCell cell = rowOne.createCell(0);
			cell.setCellStyle(headStyle);
			cell.setCellValue(name);
			//为合并单元格设置边框
			RegionUtil.setBorderTop(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);
			RegionUtil.setBorderRight(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);
			RegionUtil.setBorderLeft(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);

			SystemManageDTO col;
			Map<String, Object> data;
			HSSFRow row = sheet.createRow(1);//sheet创建第二行
			HSSFRow rowTwo = sheet.createRow(2);//sheet创建第三行
			for (int i = 0; i < cols.size(); i++) {
				col = cols.get(i);
				sheet.addMergedRegion(new CellRangeAddress(1, 2, i, i));
				cell = row.createCell(i);//创建第一个列单元格
				cell.setCellStyle(titleStyle);
				cell.setCellValue(col.getTitle());
				//sheet.setColumnWidth(i, col.getWidth() * 400);
				sheet.setColumnWidth(i, col.getWidth() * 300 * 2);
				//sheet.setColumnWidth(i, Integer.parseInt(col.get("width").toString())*40);
			}
			for (int i = 0; i < cols.size(); i++) {
				if (i == 1 || i == 2) {
					continue;
				}
				cell = rowTwo.createCell(i);
				cell.setCellStyle(titleStyle);
			}
			Object value = null;
			for (int i = 0; i < dataList.size(); i++) {
				data = dataList.get(i);
				row = sheet.createRow(i + 3);
				row.setHeight((short) 320);
				for (int j = 0; j < cols.size(); j++) {
					col = cols.get(j);
					cell = row.createCell(j);
					if (col.getField().equalsIgnoreCase("num")) {
						value = i + 1;
						cell.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					} else {
						value = data.get(col.getField());
						cell.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					}

					if (value != null) {
						if (value instanceof Double) {
							cell.setCellValue(((Double) value).doubleValue());
						} else if (value instanceof Integer) {
							cell.setCellValue(((Integer) value).intValue());
						} else {
							cell.setCellValue(value.toString());
						}
					}
				}

			}

			// 生成第二个sheet
			HSSFSheet sheetB = workbook.createSheet(name2);
			//产生表格标题行,合并第一行
			HSSFRow rowOneB = sheetB.createRow(0);
			rowOneB.setHeightInPoints(38.25f);
			//参数 1:行号 参数 2:起始列号 参数 3:行号 参数 4:终止列号
			CellRangeAddress cellRangeAddressB = new CellRangeAddress(0, 0, 0, colsB.size() - 1);
			sheetB.addMergedRegion(cellRangeAddressB);
			HSSFCell cellB = rowOneB.createCell(0);
			cellB.setCellStyle(headStyle);
			cellB.setCellValue(name2);
			//为合并单元格设置边框
			RegionUtil.setBorderTop(HSSFCellStyle.BORDER_THIN, cellRangeAddressB, sheetB, workbook);
			RegionUtil.setBorderRight(HSSFCellStyle.BORDER_THIN, cellRangeAddressB, sheetB, workbook);
			RegionUtil.setBorderLeft(HSSFCellStyle.BORDER_THIN, cellRangeAddressB, sheetB, workbook);

			SystemManageDTO colB;
			Map<String, Object> dataB;
			HSSFRow rowB = sheetB.createRow(1);//sheet创建第二行
			HSSFRow rowTwoB = sheetB.createRow(2);//sheet创建第三行
			for (int i = 0; i < colsB.size(); i++) {
				colB = colsB.get(i);
				sheetB.addMergedRegion(new CellRangeAddress(1, 2, i, i));
				cellB = rowB.createCell(i);//创建第一个列单元格
				cellB.setCellStyle(titleStyle);
				cellB.setCellValue(colB.getTitle());

				//sheet.setColumnWidth(i, col.getWidth() * 400);
				sheetB.setColumnWidth(i, colB.getWidth() * 300 * 2);
				//sheet.setColumnWidth(i, Integer.parseInt(col.get("width").toString())*40);
			}
			for (int i = 0; i < colsB.size(); i++) {
				if (i == 1 || i == 2) {
					continue;
				}
				cellB = rowTwoB.createCell(i);
				cellB.setCellStyle(titleStyle);
			}
			Object value2 = null;
			for (int i = 0; i < dataList.size(); i++) {
				dataB = dataList.get(i);
				rowB = sheetB.createRow(i + 3);
				rowB.setHeight((short) 320);
				for (int j = 0; j < colsB.size(); j++) {
					colB = colsB.get(j);
					cellB = rowB.createCell(j);
					if (colB.getField().equalsIgnoreCase("num")) {
						value2 = i + 1;
						cellB.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					} else {
						value2 = dataB.get(colB.getField());
						cellB.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					}

					if (value2 != null) {
						if (value2 instanceof Double) {
							cellB.setCellValue(((Double) value2).doubleValue());
						} else if (value2 instanceof Integer) {
							cellB.setCellValue(((Integer) value2).intValue());
						} else {
							cellB.setCellValue(value2.toString());
						}
					}
				}
			}


			String fileName = name + ".xls";
			fileName = new String(fileName.getBytes("GBK"), "iso8859-1");
			response.reset();
			response.setHeader("Content-Disposition", "attachment;filename=" + fileName);//指定下载的文件名
			response.setContentType("application/vnd.ms-excel");
			response.setHeader("Pragma", "no-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);
			BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
			workbook.write(out);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

如果需要创建更多的sheet 只需将下面代码进行复制按照上面相应的方法进行改动即可

// 生成一个表格
			HSSFSheet sheet = workbook.createSheet(name);

			// 生成第一个sheet
			//产生表格标题行,合并第一行
			HSSFRow rowOne = sheet.createRow(0);
			rowOne.setHeightInPoints(38.25f);
			//参数 1:行号 参数 2:起始列号 参数 3:行号 参数 4:终止列号
			CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, cols.size() - 1);
			sheet.addMergedRegion(cellRangeAddress);
			HSSFCell cell = rowOne.createCell(0);
			cell.setCellStyle(headStyle);
			cell.setCellValue(name);
			//为合并单元格设置边框
			RegionUtil.setBorderTop(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);
			RegionUtil.setBorderRight(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);
			RegionUtil.setBorderLeft(HSSFCellStyle.BORDER_THIN, cellRangeAddress, sheet, workbook);

			SystemManageDTO col;
			Map<String, Object> data;
			HSSFRow row = sheet.createRow(1);//sheet创建第二行
			HSSFRow rowTwo = sheet.createRow(2);//sheet创建第三行
			for (int i = 0; i < cols.size(); i++) {
				col = cols.get(i);
				sheet.addMergedRegion(new CellRangeAddress(1, 2, i, i));
				cell = row.createCell(i);//创建第一个列单元格
				cell.setCellStyle(titleStyle);
				cell.setCellValue(col.getTitle());
				//sheet.setColumnWidth(i, col.getWidth() * 400);
				sheet.setColumnWidth(i, col.getWidth() * 300 * 2);
				//sheet.setColumnWidth(i, Integer.parseInt(col.get("width").toString())*40);
			}
			for (int i = 0; i < cols.size(); i++) {
				if (i == 1 || i == 2) {
					continue;
				}
				cell = rowTwo.createCell(i);
				cell.setCellStyle(titleStyle);
			}
			Object value = null;
			for (int i = 0; i < dataList.size(); i++) {
				data = dataList.get(i);
				row = sheet.createRow(i + 3);
				row.setHeight((short) 320);
				for (int j = 0; j < cols.size(); j++) {
					col = cols.get(j);
					cell = row.createCell(j);
					if (col.getField().equalsIgnoreCase("num")) {
						value = i + 1;
						cell.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					} else {
						value = data.get(col.getField());
						cell.setCellStyle(i % 2 == 0 ? oddStyle : evenStyle);
					}

					if (value != null) {
						if (value instanceof Double) {
							cell.setCellValue(((Double) value).doubleValue());
						} else if (value instanceof Integer) {
							cell.setCellValue(((Integer) value).intValue());
						} else {
							cell.setCellValue(value.toString());
						}
					}
				}

			}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中导出包含多个sheetExcel文件并实现浏览器下载的过程如下: 1. 首先,我们需要使用第三方库如Apache POI来操作Excel文件。 2. 创建一个Workbook对象,该对象可以表示整个Excel文件。 3. 使用Workbook对象创建多个Sheet对象,分别表示不同的工作表。 4. 在每个Sheet对象中,使用Row和Cell对象来创建数据行和单元格。 5. 将需要导出的数据填充到每个Sheet的相应单元格中。 6. 完成数据填充后,使用HttpServletResponse对象设置响应头,指定文件类型为Excel文件(application/vnd.ms-excel)。 7. 使用OutputStream对象将Workbook对象写入到输出流中,实现导出。 8. 关闭输出流和Workbook对象。 示例代码如下: ```java // 导出包含多个sheetExcel文件 public void exportExcel(HttpServletResponse response) { try { // 创建Workbook对象,表示整个Excel文件 Workbook workbook = new HSSFWorkbook(); // 创建第一个Sheet对象 Sheet sheet1 = workbook.createSheet("Sheet1"); // 在第一个Sheet中创建数据行和单元格 Row row1 = sheet1.createRow(0); Cell cell1 = row1.createCell(0); cell1.setCellValue("数据1"); // 创建第二个Sheet对象 Sheet sheet2 = workbook.createSheet("Sheet2"); // 在第二个Sheet中创建数据行和单元格 Row row2 = sheet2.createRow(0); Cell cell2 = row2.createCell(0); cell2.setCellValue("数据2"); // 设置浏览器下载的响应头 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=exported_excel.xls"); // 获取输出流 OutputStream outputStream = response.getOutputStream(); // 写入到输出流中 workbook.write(outputStream); // 关闭输出流和Workbook对象 outputStream.close(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } ``` 以上代码可以实现导出包含两个sheetExcel文件,并且通过浏览器下载。其中,我们通过设置响应头使浏览器将输出结果作为Excel文件下载,文件名为exported_excel.xls。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值