Java实现 数据导出Excel

将数据库数据导出到Excel

添加依赖

<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>

工具类

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.lang.reflect.Field;
import java.util.List;

/**
 *  数据导出excel,工具类
 * */
public class ExcelUtils {

    /**
     *  生成Excel表格
     * @param sheetName sheet名称
     * @param titleList 表头列表
     * @param dataList 数据列表
     * @return HSSFWorkbook对象
     * */
    public static HSSFWorkbook createExcel(String sheetName,
                                           List<String> titleList,List dataList) throws IllegalAccessException {

        //创建HSSFWorkbook对象
        HSSFWorkbook wb = new HSSFWorkbook();
        //创建sheet对象
        HSSFSheet sheet=wb.createSheet(sheetName);
        //在sheet里创建第一行,这里即是表头
        HSSFRow rowTitle=sheet.createRow(0);

        //写入表头的每一个列
        for (int i = 0; i < titleList.size(); i++) {
            //创建单元格
            rowTitle.createCell(i).setCellValue(titleList.get(i));
        }

        //写入每一行的记录
        for (int i = 0; i < dataList.size(); i++) {
            //创建新的一行,递增
            HSSFRow rowData = sheet.createRow(i+1);

            //通过反射,获取POJO对象
            Class cl = dataList.get(i).getClass();
            //获取类的所有字段
            Field[] fields = cl.getDeclaredFields();
            for (int j = 0; j < fields.length; j++) {
                //设置字段可见,否则会报错,禁止访问
                fields[j].setAccessible(true);
                //创建单元格
                rowData.createCell(j).setCellValue((String) fields[j].get(dataList.get(i)));
            }
        }
        return wb;
    }
}

实现数据Excel导出

 /**
   * 信息Excel导出
   * time是根据时间查询数据源的参数
   * @param
   * @return
   */
@GetMapping("getOrderByTime")
public Result getOrderByTime(HttpServletResponse response, @RequestParam(value = "time") String stoptime) {
	try {
		String fileName = "订单数据导出";
		// sheet名
		String sheetName = "sheet";
		//表头集合,作为表头参数
		List<String> titleList = new ArrayList<>();
		titleList.add("日期");
		titleList.add("订单数量(单)");
		titleList.add("营业额(元)");
		titleList.add("营业利润(元)");
		
		// resultList是根据参数time从数据库查出来的数据源(暂时用一个空集合代替)
		List<Result> resultList = new ArrayList<>();
		//TODO
		
		//调取封装的方法,传入相应的参数
		HSSFWorkbook workbook = ExcelUtils.createExcel(sheetName, titleList, resultList );
		//输出Excel文件
		OutputStream output = response.getOutputStream();
		response.reset();
		//中文名称要进行编码处理
		response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("GB2312"), "ISO8859-1") + ".xls");
		response.setContentType("application/x-xls");
		workbook.write(output);
		output.close();
		return ResultUtil.success();
		
	} catch (Exception e) {
        e.printStackTrace();
        return ResultUtil.setERROR();
    }
}

调用

http://172.16.17.235:9010/ahc/getOrderByTime?time=2021-01-20 13:22:17

浏览器上访问地址后会自动下载一个Excel文件
在这里插入图片描述
在这里插入图片描述
到这里Excel导出就完成了。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值