ssm 框架中 怎么样将jsp中显示的详情表格数据导出到 Excel表格中 要求样式变 还要显示网格线

J2EE 码拜 7年前 (2017-05-07) 3313次浏览
ssm 框架中  怎么样将jsp中显示的详情表格数据导出到 Excel表格中 要求样式变 还要显示网格线
解决方案

3

你应该是直接调后台的接口,把数据写到excel里面吧.   这个接口就是jsp页面调的那个接口.然后就是excel导出的问题了

13

同楼上,后台调用JSP显示时调用的接口获取数据,然后使用POI导出为Excel,并控制单元格样式
一些参考代码

	/**
	 * 创建组织架构导入结果文件
	 * 
	 * @param listMessage
	 * @param fileName
	 * @param succSheetName
	 * @param failSheetName
	 */
	private void createImportResultFile(ArrayList<Message<String>> listMessage, String fileName, String succSheetName,
			String failSheetName) {
		boolean bCreateFile = createFile(fileName); // 创建文件
		if (!bCreateFile) {
			logger.info("创建组织架构导入结果文件失败 fileName=" + fileName);
			return;
		}
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(fileName);
			HSSFWorkbook workBook = new HSSFWorkbook();
			// 表头的单元格个数目
			int cellNumber = OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER().length;
			logger.info("填充导入数据成功excel开始");
			// 创建成功导入数据sheet
			HSSFSheet succsheet = workBook.createSheet(succSheetName);
			// 填充成功导入sheet表头
			createTableHeader(succsheet, getHeaderCellStyle(workBook),
					OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER(),
					OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_COLUMN_WIDTH(), cellNumber);
			// 填充成功导入sheet表内容
			createImportResultTableRow(succsheet, getDataCellStyle(workBook), listMessage, true);
			logger.info("填充导入数据成功excel结束");
			logger.info("填充导入数据失败excel开始");
			// 创建导入失败数据sheet
			HSSFSheet failsheet = workBook.createSheet(failSheetName);
			// 填充导入失败sheet表头
			createTableHeader(failsheet, getHeaderCellStyle(workBook),
					OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_HEADER(),
					OrganizationConstants.GET_DEPARTMENT_IMPORT_RESULT_TABLE_COLUMN_WIDTH(), cellNumber);
			// 填充导入失败sheet表内容
			createImportResultTableRow(failsheet, getDataCellStyle(workBook), listMessage, false);
			logger.info("填充导入数据失败excel结束");
			workBook.write(fos);
		} catch (Exception e) {
			e.printStackTrace();
			logger.info("生成组织架构导入结果文件出错");
			logger.info(e.getMessage());
		} finally {
			try {
				fos.close();
			} catch (Exception e) {
				logger.info("生成组织架构导入结果文件出错");
				logger.info(e.getMessage());
			}
		}
	}
	/**
	 * 创建文件
	 * 
	 * @param fileName
	 * @return
	 */
	public boolean createFile(String filePath) {
		try {
			// 文件所在目录不存在则创建
			int find = filePath.lastIndexOf(File.separator);
			if (find != -1) {
				String path = filePath.substring(0, find);
				createFolder(path);
			}
			// 文件不存在则创建
			File file = new File(filePath);
			if (!file.exists()) {
				return file.createNewFile();
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	/**
	 * 创建表头
	 * 
	 * @param sheet
	 * @param tableHeader
	 * @param cellNumber
	 */
	public void createTableHeader(HSSFSheet sheet, HSSFCellStyle cellStyle, String[] tableHeader,
			int[] tableColumnWidth, int cellNumber) {
		HSSFRow headerRow = sheet.createRow(0); // 创建表头行
		for (int i = 0; i < cellNumber; i++) {
			HSSFCell headerCell = headerRow.createCell(i);
			headerCell.setCellValue(tableHeader[i]); // excel表格值
			headerCell.setCellStyle(cellStyle); // excel表格样式
			sheet.setColumnWidth(i, 256 * tableColumnWidth[i]); // in units of
			// 1/256th of a
			// character
			// width
		}
		logger.info("表格头填充完毕");
	}
	private void createImportResultTableRow(HSSFSheet sheet, HSSFCellStyle cellStyle,
			ArrayList<Message<String>> listMessage, boolean bSuccImport) {
		int rowIndex = 1;
		HSSFCell cell0, cell1, cell2;
		int nCount = listMessage.size();
		for (int i = 0; i < nCount; i++) {
			Message<String> message = listMessage.get(i);
			if (bSuccImport == message.getSuccess()) {
				// 创建第rowIndex行
				HSSFRow row = sheet.createRow(rowIndex);
				// 填充第rowIndex行
				cell0 = row.createCell(0);
				int nRow = i + 1;
				cell0.setCellValue("" + nRow);
				cell0.setCellStyle(cellStyle);
				cell1 = row.createCell(1);
				cell1.setCellValue(message.getData());
				cell1.setCellStyle(cellStyle);
				cell2 = row.createCell(2);
				cell2.setCellValue(message.getDescription());
				cell2.setCellStyle(cellStyle);
				// logger.info("第" + rowIndex + "行填充完毕");
				rowIndex++;
			}
		}
		logger.info("填充完毕");
	}

6

引用:

本人没有使用到接口啊

你前端展示的数据都是在页面上面写死的吗?

3

引用:

说错了应该是导出到Excel中的样式不变ssm 框架中 怎么样将jsp中显示的详情表格数据导出到 Excel表格中 要求样式变 还要显示网格线

数据哪儿来的其实不重要,你的难点应该是在于excel的导出,百度上面有很多例子

6

这叫POI了吧,导出导入成execl。

3

你解决了吗   本人现在任务和你 的一样   导出前台选中的数据。SSM框架  能给本人看看你怎么实现的吗 谢谢了

18

引用:
Quote: 引用:

这叫POI了吧,导出导入成execl。

poi只是实现方式中的其中一种  本人在网上找了很多  他们都是  上边一行title  下边是数据  而本人的要比这个稍微复杂点

POI也是手动,怎么拆,怎么弄都由你本人弄,应该是导出里面最好的了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明ssm 框架中 怎么样将jsp中显示的详情表格数据导出到 Excel表格中 要求样式变 还要显示网格线
喜欢 (0)
[1034331897@qq.com]
分享 (0)