博客
关于我
查询数据并导出报表
阅读量:228 次
发布时间:2019-02-28

本文共 3928 字,大约阅读时间需要 13 分钟。

## 需求

页面查询用户表信息, 并实现数据导出(以.xlsx格式保存至本地)

报表导出展示效果:

一, 环境搭建

1, 新建一SSM测试项目(ssm_test), 用于测试报表导出功能, 具体搭建过程不再赘述;

2, 报表导出需要用到apache提供的两个jar包, 添加对应依赖

<!-- 用于进行数据报表导出操作 -->	<dependency>	    <groupId>org.apache.poi</groupId>	    <artifactId>poi</artifactId>	    <version>3.14</version>	</dependency>	<dependency>	    <groupId>org.apache.poi</groupId>	    <artifactId>poi-ooxml</artifactId>	    <version>3.14</version>	</dependency>

 

二, 后台接口实现

1, DataExportController .java

## 这里查询数据库环节以固定结果集替代, 用于简单测试

package cn.tedu.test.controller;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import javax.servlet.http.HttpServletResponse;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/* * 查询数据以报表的形式导出 */@Controllerpublic class DataExportController {	public static final String[] HEADERS = {"姓名", "性别", "年龄", "工作", "住址"};	@RequestMapping("/export.do")	@ResponseBody	public void doExport(HttpServletResponse response) throws Exception {		List<List<String>> data = new ArrayList<List<String>>();		for (int i = 0; i < 6; i++) {			List<String> userInfo = new ArrayList<String>();			userInfo.add("小明" + i);			userInfo.add("男" + i);			userInfo.add("27" + i);			userInfo.add("软件开发" + i);			userInfo.add("上海浦东" + i);			data.add(userInfo);		}		ExcelUtil excelUtil = new ExcelUtil("userInfo");		Workbook workbook = new XSSFWorkbook();		Sheet sheet = workbook.createSheet();		excelUtil.formData(Arrays.asList(HEADERS), data, sheet);		excelUtil.buildExcelDocument(workbook, response);	}}

## 备注: for循环中进行字符串加号拼接的性能不高, 建议使用 StringBuilder 或 StringBuffer的append()方法; 

参考文章:

 

2, ExcelUtil.java

package cn.tedu.test.controller;import java.io.OutputStream;import java.net.URLEncoder;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;/** * excel报表工具类 */public class ExcelUtil {	private String filename = "";		public ExcelUtil(String filename) {		this.filename = filename;	}		public void buildExcelDocument(Workbook workbook, HttpServletResponse response) throws Exception {		response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");		response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(filename + ".xlsx", "UTF-8"));		OutputStream ouputStream = response.getOutputStream();		workbook.write(ouputStream);		ouputStream.flush();		ouputStream.close();	}		// 填充表头和数据	public void formData(List<String> headers, List<List<String>> data, Sheet sheet){		int rowIndex = 0;	    int colIndex = 0;	    Row head= sheet.createRow(rowIndex++);	    for (String title : headers) {	    	Cell tCell = head.createCell(colIndex++);	    	tCell.setCellValue(title);		}	    for (List<String>  record : data) {	    	Row row = sheet.createRow(rowIndex++);			colIndex = 0;			for (String value : record) {				Cell tCell = row.createCell(colIndex++);				tCell.setCellValue(value);			}		}	}	public String getFilename() {		return filename;	}	public void setFilename(String filename) {		this.filename = filename;	}	}

 

三, 前台代码实现

1, index,html

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>guess</title><script type="text/javascript" src="jquery.min.js"></script><script type="text/javascript">  //body加载完调用;  $(function(){	  //导出数据报表	  $("#export").click(function(){		  alert('导出报表')		  window.open("/ssm_test/export.do");		}	  );  });  </script></head><body>    <input type="button" value="导出数据报表" id="export"></body></html>

 

四, 功能测试

1, 访问路径   

2, 如果访问被拦截, 需要设置下, 选中始终允许即ok!

3, 弹出自定义存储位置弹框, 点击保存, 保存成功即ok!

 

转载地址:http://hwip.baihongyu.com/

你可能感兴趣的文章
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>