1. 程式人生 > >Demo系列一之 Form表單下載Excel檔案

Demo系列一之 Form表單下載Excel檔案

效果圖區:
這裡寫圖片描述
這裡寫圖片描述

程式碼區:

  • 前端程式碼,只提供點選事件中的內容;
        //"匯出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);
    }
}

相關推薦

Demo系列 Form下載Excel檔案

效果圖區: 程式碼區: 前端程式碼,只提供點選事件中的內容; //"匯出Execl"按鈕點選事件 $("#export").click(function(){ var form = $

跟KingDZ學HTML5 HTML5 Form 新元素

rmi 出現 第一個 blog inpu tput form itl scrip 新的課程又開始,哈哈,最近的文章更新比較快,希望大家跟上俺的步伐啊,呵呵,但是每當看到閱讀量,哎,還真不多,可是俺還要堅持寫下去,不知道,大家是不是都沒有在研究HTML5呢? 這節課程,講的是

react+antd系列Form(2):格式限制驗證

格式限制 antd中表單的功能很多,下面就為大家整理了一下antd中常用的幾種表單輸入格式驗證: 1. 輸入框不能為空限制,如下: {getFieldDecorator('name', { rules: [{ require

react+antd系列Form(1):新增與刪除

在用antd的時候,我們如果要對錶單進行新增和刪除該怎麼弄呢,如下: import { connect } from 'dva'; import { Form, Input, Button } from 'antd'; import styles from './eg1.css';

知識總結form屬性及H5新增特性

bsp ron mit 驗證 pick -s value 地址欄 屬性 一、form的幾大屬性   1.method屬性     規定用於發送 form-data 的 HTTP 方法,即請求的方式;主要用來提交參數與後臺數據進行交互。     分為GET和POST兩種方式,

初學servletform

exce cat eth col country values nts author ons 使用doget向頁面寫表單,使用dopost讀取表單內容,包括了單選按鈕,復選框,下拉列表等等的讀取方法,form的action屬性不寫,默認表單會被提交給請求他時用的相同的URL

Django框架 Form和Ajax上傳文件

不可 _for render ren files AS AD 什麽 OS 瀏覽目錄 Form表單上傳文件 Ajax上傳文件 偽造Ajax上傳文件 Form表單上傳文件 html <h3>form表單上傳文件&

71、Djangoform

protoc valid init title except Go doc 列表 ima Form介紹 我們之前在HTML頁面中利用form表單向後端提交數據時,都會寫一些獲取用戶輸入的標簽並且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗

Djangoform那點事

bootstrap msg 價格 code cap 愛好 ots exce 同時 Form介紹 我們之前在HTML頁面中利用form表單向後端提交數據時,都會寫一些獲取用戶輸入的標簽並且用form標簽把它們包起來。 與此同時我們在好多場景下都需要對用戶的輸入做校驗,比

Django form

its html rom ida cal 從數據 disable ger orm Django中的Form表單   1、背景     平時我們在書寫form表單時,經常都是手動的去寫一些input標簽,讓用戶輸入一些功能,進行一些校驗的判斷,等等。Django中的for

Djangoform

所有 install rip mod 由於 合格 NPU enc 多選框 Form介紹 總結,form組件的主要功能如下:   生成頁面可用的HTML標簽   對用戶提交的數據進行校驗   保留上次輸入內容   提示錯誤信息 普通方式手寫註冊功能 views.

Djangoform詳解

構建一個表單 假設你想在你的網站上建立一個簡單的表單,以獲得使用者的名字。你需要類似這樣的模板: <form action="/your-name/" method="post"> <label for="your_name">Your name: </labe

Django元件Form

一、Django中的Form表單介紹 我們之前在HTML頁面中利用form表單向後端提交資料時,都會寫一些獲取使用者輸入的標籤並且用form標籤把它們包起來。 與此同時我們在好多場景下都需要對使用者的輸入做校驗,比如校驗使用者是否輸入,輸入的長度和格式等正不正確。如果使用者輸入的內容有錯誤就需要

JqueryForm儲存位元組流圖片

最終效果,點選文字框後彈出檔案瀏覽框,選擇圖片檔案(會驗證),上傳伺服器成功(這裡用的MongoDB)後會返回一個路徑值,自動填入文字框中 部分JSP頁面  <form id="companyForm" method="post"> <input i

Django基礎form的補充進階

1. 應用Bootstrap樣式 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" conte

form中的檔案上傳下載

檔案上傳:   1-問題:getParameter()不能使用     1-返回值:string   2-解決:使用第三方上傳元件來完成  fileupload      3-步驟:     1-前端:form       1-file域       2-mehtod=po

隱藏form下載檔案

下載檔案操作 java contorller程式碼 @RequestMapping ("/downloadZIPFile") @ResponseBody public void dow

Jquery UI Dialog Form 提交

我專注的是Dialog的Form表單提交的問題。 不知道大家使用Dialog的方式是什麼,我就說說我用的方式吧。 <divid="dialog">        <formid="dialogForm"method="post"action="

JSP Servlet form 與Servlet之間的引數傳送

JSP Servlet之 form表單 與Servlet之間的引數傳送 //index.html <html> <head> <title>welcome</title> </head

使用form上傳檔案

今天在專案中要寫一個上傳檔案的功能,使用jsp中的form表單的形式完成。 首先新建一個jsp,使用最原始的form表單來完成。 jsp中的程式碼如下,很簡單: <form method="post" action="<%=ermDomainUrl %>