Demo系列一之 Form表单下载Excel文件

本文介绍了一个具体的导出Excel案例,包括前端实现点击导出功能、后端处理导出请求并生成Excel文件,以及使用POI库进行文件操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果图区:
这里写图片描述
这里写图片描述

代码区:

  • 前端代码,只提供点击事件中的内容;
        //"导出Execl"按钮点击事件
        $("#export").click(function(){
            var form = $("<form>");   
            $('body').append(form);  
                form.attr('style','display:none');   
                form.attr('target','');
                form.attr('method','post');
                form.attr('action','${context_path}/ptsp/export');//下载文件的请求路径

                //对应查询条件的开始时间
                var input1 = $('<input>'); 
                input1.attr('type','hidden'); 
                input1.attr('name','spmcStr'); 
                input1.attr('value',$("#spmcStr").val());
                form.append(input1);  

                //对应查询条件的结束时间
                var input2 = $('<input>'); 
                input2.attr('type','hidden'); 
                input2.attr('name','dpmcStr'); 
                input2.attr('value',$("#dpmcStr").val());
                form.append(input2);

                //对应查询条件的店铺名称
                var input3 = $('<input>'); 
                input3.attr('type','hidden'); 
                input3.attr('name','beginTime'); 
                input3.attr('value',$("#beginTime").val());
                form.append(input3);

                //对应查询条件的商品名称
                var input4 = $('<input>'); 
                input4.attr('type','hidden'); 
                input4.attr('name','endTime'); 
                input4.attr('value',$("#endTime").val());
                form.append(input4);

                form.submit();    
        });
  • 后端代码,比较常用的ssm结构;
    /**  
     * <p>Description: 导出Excel文件</p>  
     * @param response
     * @param request
     * @param ptsp 页面对象参数 
     * @author wjt  
     * @date 2018年7月25日
     */
    @RequestMapping("/export")
    public void export(HttpServletResponse response,HttpServletRequest request,LptPtsp ptsp){
        Map<String,Object> params = new HashMap<String,Object>();

        String dpmcs = ptsp.getDpmcStr();
        String spmcs = ptsp.getSpmcStr();

        params.put("beginTime", ptsp.getBeginTime());
        params.put("endTime", ptsp.getEndTime());
        params.put("dpmcs", ptsp.getDpmcs());
        params.put("spmcs", ptsp.getSpmcs());
        //返回的数据集合,业务层及持久层代码就不展示了,主要就是根据条件返回对象实体.
        List<LptPtsp> ptsps = lptDpSpService.findPtspListNoTPage(params);
        //返回结构后,调用ExcelUtils公共类完成导出.
        ExcelUtils.exportPtSpExcel(response,request,ptsps);
    }
  • ExcelUtils公共类代码
package com.chw.system.util;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import com.chw.model.lpt.LptPtsp;

public class ExcelUtils {

    /**
     * 创建excel
     * @param model
     * @author      wjt
     * @serialData  2014-11-13  
     */
    public static void  CreateExcel(String filepath,String fileName, String[] title,HashMap<String, String []> hashmap,HttpServletResponse response){
        // 第一步,创建 工作簿 webbook
        HSSFWorkbook wb = new HSSFWorkbook();  
        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  
        HSSFSheet sheet = wb.createSheet(fileName.substring(0, fileName.indexOf("_")+1));  
        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  
        HSSFRow row = sheet.createRow((int) 0);  
        // 第四步,创建单元格,并设置值表头 设置表头居中  
        HSSFCellStyle style = wb.createCellStyle();  
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式  
        HSSFCell cell = null;
        for (int k = 0; k < title.length; k++) {// 添加标题行
            cell = row.createCell(k);
            cell.setCellValue(title[k]);// 给单元格赋值
            sheet.setColumnWidth((short) k,5000);
        }
        // 第五步,读取数据 插入Excel
        int i =0;
        Iterator<Entry<String, String []>> iter = hashmap.entrySet().iterator();
        while(iter.hasNext()){
            Map.Entry<String, String []> info= iter.next();
            row = sheet.createRow(i+1);  
            row.createCell(0).setCellValue(i+1);
            for (int j = 0; j < info.getValue().length; j++){
                row.createCell(j+1).setCellValue(info.getValue()[j]);
            }
            i++;
        }
         try{  
             //第六步  保存临时文件
             FileOutputStream fout = new FileOutputStream(filepath+fileName);
             wb.write(fout);  
             fout.close();
             //第八步 下载文件
             downLoad(filepath,fileName,response, false);
         }catch(Exception e)  {  
             e.printStackTrace();  
         }finally {
            // 第九步  删除临时文件
            File file = new File(filepath+fileName);
            if (file.exists()) {
                file.delete();
            }
        }
    }
    /**
     * 获取导出路径
     * @param request
     * @return
     */
    @SuppressWarnings("deprecation")
    private static String getFilePath(HttpServletRequest request){
        String filePath =request.getRealPath("/");//导出excel路径
        return filePath;
    }   
    private static String getFileName(String filename){
        String rs = filename + "_" + getCurrDate()+ ".xls"; // 文件 加上时间戳,以防文件名重复
        return rs;
    }

    // 获取当前时间
    private static String getCurrDate() {
        GregorianCalendar gc = new GregorianCalendar();
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
        df.setTimeZone(gc.getTimeZone());
        return df.format(new java.util.Date());
    }
    private static void downLoad(String filePath,String filename,HttpServletResponse response,boolean isOnLine) throws Exception {
        File f = new File(filePath+filename);// 获取文件 具体地址
        if (!f.exists()) {
            response.sendError(404, "File not found!");
            return;
        }       
        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
        byte[] buf = new byte[12288];// 12M大小的数组
        int len = 0;
        response.reset(); // 非常重要
        if (isOnLine) { // 在线打开方式
            URL u = new URL("file:///" + filePath+filename);
            response.setContentType(u.openConnection().getContentType());
            response.setHeader("Content-Disposition","inline; filename=" + f.getName());
        } else { // 纯下载方式
            String ffname = new String(filename.getBytes(), "iso8859-1");
            response.setContentType("application/vnd.ms-excel;charset=gbk");
            response.setHeader("Location", ffname);
            response.setHeader("Content-Disposition", "attachment; filename="+ ffname);
        }
        OutputStream out = response.getOutputStream();
        while ((len = br.read(buf)) > 0)
            out.write(buf, 0, len);
        br.close();
        out.close();
        out.flush();
    }
    /**  
     * <p>Description: 导出平台商品Excel</p>  
     * @param response
     * @param request  
     * @author wjt  add
     * @param ptsps 
     * @date 2018年7月24日
     */
    public static void exportPtSpExcel(HttpServletResponse response, HttpServletRequest request, List<LptPtsp> ptsps) {
        String filepath = getFilePath(request);
        String fileName = getFileName("平台商品统计信息");    
        String[] title = new String[]{"序号","店铺名称","企业名称","商品名称","销量","价格(元)","金额(元)","退货数量","退款金额(元)","实际销量","实际金额(元)","返现比例"};
        //查询结果list,封装在Map里 ,以便 导出Excel公用
        HashMap<String, String []> hashmap = new HashMap<String,  String []>();
        if (CheckUtils.listIsNotNull(ptsps)) {
              for (LptPtsp ptsp : ptsps) {
                  String[] str = new  String[]{ptsp.getDpmc(),ptsp.getQymc(),ptsp.getSpmc(),ptsp.getSl(),ptsp.getDj(),ptsp.getJe(),ptsp.getSpsl()
                          ,ptsp.getTkje(),ptsp.getSjsl(),ptsp.getSjje(),ptsp.getJxsRate()};  
                  hashmap.put(ptsp.getDpspid(), str);
            }
        }
        //执行导出
        CreateExcel(filepath,fileName,title,hashmap,response);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值