excel (2)

... poi 3.8

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletException;
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.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;

/**
 * Excel 工具类
 * 
 * @author Administrator
 * 
 */
public class ExcelUtil2 {
    //excel模板路径
    //private static final String baseExcelModelUrl = System.getProperty("catalina.home") + "/webapps/fszfbz_v1"; 
    private static final String baseExcelModelUrl = System.getProperty("catalina.home") + "/webapps/JZOA_V2/";
    
    /** 模板   **/
    
    /**
     * 复制excel模板
     * 
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static HSSFWorkbook importExcellModel(String excelurl) throws FileNotFoundException, IOException {
        File file = new File(baseExcelModelUrl+excelurl);
        InputStream is = new FileInputStream(file);
        HSSFWorkbook wb = new HSSFWorkbook(is);
        return wb;
    }
    
    /**
     * 根据workbook并插入数据
     * @param modelName
     * @param dataArray
     * @param fieldName
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static HSSFWorkbook createHSSFSheet(HSSFWorkbook wb,int sheetNum,int startRow,int startCol,List<Map<String,Object>> dataArray,String[] fieldName) throws FileNotFoundException, IOException{
        HSSFSheet sheet;
        HSSFCell cell;
            
        sheet = wb.getSheetAt(sheetNum);
        
        //导入数据
        int rowNum = startRow-2;
        sheet.shiftRows(rowNum+1, sheet.getPhysicalNumberOfRows(), dataArray.size());
        HSSFCellStyle cellStyle = getCellStyle(wb);
        
        int colNum = startCol-2;
        for (int i = 0; i < dataArray.size(); i++) {
            //数据
            Map<String, Object> dataMap = dataArray.get(i);
            //创建行
            HSSFRow row = sheet.createRow(++rowNum);
            //数据列
            for(int j=0;j<fieldName.length;j++){
                cell = row.createCell(++colNum);
                cell.setCellStyle(cellStyle);
                if("序号".equals(fieldName[j])){//序号则输出相应序号
                    cell.setCellValue(i+1);
                    continue;
                }
                if("".equals(fieldName[j])){//字符串空则不填
                    continue;
                }
                Object cellValue = dataMap.get(fieldName[j]);
                if(cellValue!=null){
                    cell.setCellValue(cellValue.toString());
                }
            }
            colNum = startCol-2;
        }
        return wb;
    }
    
    public static HSSFWorkbook createHSSFSheet(HSSFWorkbook wb,int startRow,int startCol,List<Map<String,Object>> dataArray,String[] fieldName) throws FileNotFoundException, IOException{
        return createHSSFSheet(wb,0,startRow,startCol,dataArray,fieldName);
    }
    
    /**
     * 通过传入路径复制模板并设置数据
     */
    public static HSSFWorkbook createHSSFSheet(String modelPath,int sheetNum,int startRow,int startCol,List<Map<String,Object>> dataArray,String[] fieldName) throws FileNotFoundException, IOException{
        HSSFWorkbook wb = importExcellModel(modelPath);
        createHSSFSheet(wb,sheetNum,startRow,startCol,dataArray,fieldName);
        return wb;
    }
    /**
     *  
     * @param modelPath 路径
     * @param startRow
     * @param startCol 
     * @param dataArray 数据
     * @param fieldName 文件名称???
     * @return
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static HSSFWorkbook createHSSFSheet(String modelPath,int startRow,int startCol,List<Map<String,Object>> dataArray,String[] fieldName) throws FileNotFoundException, IOException{
        HSSFWorkbook wb = importExcellModel(modelPath);
        createHSSFSheet(wb,0,startRow,startCol,dataArray,fieldName);
        return wb;
    }
    
    /** 获取指定内容,无则创建 **/
    
    /**
     * 获取指定行,若指定行未创建则创建
     * @param sheet
     * @param rowNum
     * @return
     */
    public static HSSFRow getHSSFRow(HSSFSheet sheet,Integer rowNum){
        HSSFRow row = sheet.getRow(rowNum); 
        if (row == null) { 
            row = sheet.createRow(rowNum); 
        }
        return row;
    }
    
    /**
     * 获取指定单元格,若指定单元格未创建则创建
     * @param sheet
     * @param rowNum
     * @return
     */
    public static HSSFCell getHSSFCell(HSSFSheet sheet,Integer rowNum,Integer colNum){
        HSSFRow row = getHSSFRow(sheet,rowNum); 
        HSSFCell cell = row.getCell(colNum);
        if (cell == null) { 
            cell = row.createCell(colNum);
        }
        return cell;
    }
    
    /**
     * 获取指定单元格,若指定单元格未创建则创建
     * @param sheet
     * @param rowNum
     * @return
     */
    public static HSSFCell getHSSFCell(HSSFRow row,Integer colNum){
        HSSFCell cell = row.getCell(colNum);
        if (cell == null) { 
            cell = row.createCell(colNum);
        }
        return cell;
    }
    
    /** 数据替换   **/
    
    /**
     * 替换表格${}数据
     * 
     * @param replaceDataMap
     * @param sheet
     */
    public static void replaceCellValue(Map<String, Object> replaceDataMap,HSSFSheet sheet) {
        replaceCellValue(replaceDataMap,sheet,0);
    }
    
    public static void replaceCellValue(Map<String, Object> replaceDataMap,HSSFSheet sheet,int checkRowNum) {
        Iterator rows = sheet.rowIterator();
        while (rows.hasNext()) {
            HSSFRow row = (HSSFRow) rows.next();
            if (row != null) {
                int num = row.getLastCellNum();
                if(checkRowNum-1>=0){
                    if (row.getRowNum() > checkRowNum-1) {
                        break;
                    }
                }
                for (int i = 0; i < num; i++) {
                    HSSFCell cell = row.getCell(i);
                    if (cell == null || cell.getStringCellValue() == null) {
                        continue;
                    }
                    String cellValue = cell.getStringCellValue();

                    if (!"".equals(cellValue)) {
                        if (cellValue.indexOf('$') != -1) {
                            cell.setCellValue(getReplaceValue(cellValue,replaceDataMap));
                        }
                    } else {
                        cell.setCellValue("");
                    }
                }
            }
        }
    }
    

    /**
     * 从replaceDataMap中获取${XX}对应要替换的数据
     * @param cellValue        ${}名称(每$待办要替换一个数据)
     * @param replaceDataMap    包含要用于替换数据的map
     * @return
     */
    private static String getReplaceValue(String cellValue,Map<String, Object> replaceDataMap) {

        // 获取$出现的次数。
        int num = 0;
        for (int i = 0; i < cellValue.length(); i++) {
            if ("$".equals(cellValue.substring(i, i + 1))) {
                num++;
            }
        }
        for (int i = 0; i < num; i++) {
            String str = cellValue.substring(cellValue.indexOf('{') + 1,cellValue.indexOf('}'));
            if (null == replaceDataMap.get(str)) {
                cellValue = cellValue.replace("${" + str + "}", "");
            } else {
                cellValue = cellValue.replace("${" + str + "}",
                (String) replaceDataMap.get(str));
            }
        }
        return cellValue;
    }
    
    /**
     * 设置建表时间
     * c_t_year 建表时间-年
     * c_t_mouth 建表时间-月
     * c_t_day 建表时间-日
     * @param sheet
     */
    private static void setCreateTime(HSSFSheet sheet){
        //设置建表时间数据
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int mouth = c.get(Calendar.MONTH) + 1;
        int day = c.get(Calendar.DAY_OF_MONTH);
        Map<String, Object> replaceDataMap = new HashMap<String, Object>();
        replaceDataMap.put("c_t_year", String.valueOf(year));
        replaceDataMap.put("c_t_mouth", String.valueOf(mouth));
        replaceDataMap.put("c_t_day",String.valueOf(day));
        //替换
        replaceCellValue(replaceDataMap, sheet);
    }
    
    /** 坐标   **/
    
    //x轴坐标+1
    private static final Map<Character, Integer> excelXAddr = new HashMap<Character, Integer>(){
        {
            put('A',1);put('B',2);put('C',3);put('D',4);put('E',5);put('F',6);
            put('G',7);put('H',8);put('I',9);put('J',10);put('K',11);put('L',12);
            put('M',13);put('N',14);put('O',15);put('P',16);put('Q',17);
            put('R',18);put('S',19);put('T',20);put('U',21);put('V',22);
            put('W',23);put('X',24);put('Y',25);put('Z',26);
        }
    };
    
    /**
     * 根据坐标获取X坐标对应的索引
     * @param xName
     * @return
     */
    public static final Integer getXAddr(String xName){
        Integer xAddr = 0;
        if(xName!=null && xName!=""){
            char[] xNameList = xName.toCharArray();
            xAddr = excelXAddr.get(xNameList[0]);
            for(int i=1;i<xNameList.length;i++){
                xAddr = xAddr*26+excelXAddr.get(xNameList[i]);
            }
        }
        return --xAddr;
    }
    
    /** 单元格合并   **/
    
    /**
     * 多次合并单元格
     * @param sheet 需要合并的工作表对象
     * @param mergedAddress2D 单次合并单元格数组的数组
     */
    public static void mergedAddress(HSSFSheet sheet,String [][] mergedAddress2D){
        for(String[] mergedAddress:mergedAddress2D){
            mergedAddress(sheet ,mergedAddress);
        }
    }
    
    /**
     * 一次合并单元格
     * @param sheet 需要合并的工作表对象
     * @param mergedAddress 如:{"1","A","1","K"}前两个为左上角单元格,后两个值为右下角单元格
     */
    public static void mergedAddress(HSSFSheet sheet,String [] mergedAddress){
        //x轴开始坐标
        int xsA = getXAddr(mergedAddress[1]);
        //x轴结束坐标
        int xeA = getXAddr(mergedAddress[3]);
        sheet.addMergedRegion(new CellRangeAddress(Integer.valueOf(mergedAddress[0]).intValue()-1,Integer.valueOf(mergedAddress[2]).intValue()-1,--xsA,--xeA));
    }
    
    /**
     * 多次合并单元格,并可设置合并单元格属性
     * @param sheet 需要合并的工作表对象
     * @param mergedAddress2D 单次合并单元格数组的数组
     */
    public static void mergedAddress(HSSFWorkbook wb,int sheetNum,List<Map<String,String>> mergedAddressList){
        HSSFSheet sheet = wb.getSheetAt(sheetNum);
        for(Map<String,String> mergedAddress:mergedAddressList){
            Integer ys = Integer.valueOf(mergedAddress.get("ys"));
            Integer xs = Integer.valueOf(mergedAddress.get("xs"));
            Integer ye = Integer.valueOf(mergedAddress.get("ye"));
            Integer xe = Integer.valueOf(mergedAddress.get("xe"));
            //合并单元格
            CellRangeAddress cellRangeAddress = mergedAddress(sheet,ys,xs,ye,xe);
            
            //获取指定单元格
            HSSFCell cell = getHSSFCell(sheet,ys,xs);
            //查看是否需要设置单元格属性
            String cellStyle = mergedAddress.get("cellStyle");
            if(null!=cellStyle){
                HSSFCellStyle HSSFCS = getCellStyle(wb,cellStyle);
                cell.setCellStyle(HSSFCS);
                //setBorderForMergeCell(CellStyle.BORDER_THIN,cellRangeAddress,0,wb);
            }
            
            //查看是否需要设置字体属性
            String fontStyle = mergedAddress.get("fontStyle");
            if(null!=fontStyle){
                HSSFFont HSSFF = getFontStyle(wb,fontStyle);
                HSSFCellStyle HSSFCS = cell.getCellStyle();
                HSSFCS.setFont(HSSFF);
                cell.setCellStyle(HSSFCS);
            }
            
            //查看是否需要设置单元格内容
            String content = mergedAddress.get("content");
            if(null!=content){
                cell.setCellValue(content);
            }
        }
    }
    
    /**
     * 一次合并单元格
     * @param sheet 需要合并的工作表对象
     * @param ys y轴开始坐标(左上角单元格y轴)
     * @param xs x轴开始坐标(左上角单元格x轴)
     * @param ye y轴结束坐标(右下角单元格y轴)
     * @param xe x轴结束坐标(右下角单元格x轴)
     * 
     */
    public static CellRangeAddress mergedAddress(HSSFSheet sheet,int ys,int xs,int ye,int xe){
        CellRangeAddress cellRangePlanNo = new CellRangeAddress( ys, ye, xs, xe );
        sheet.addMergedRegion(cellRangePlanNo);
        return cellRangePlanNo;
    }
    
    /** 工具   **/
    
    //自动获取单元格高度
    public static float getExcelCellAutoHeight(String str, float fontCountInline) {
        float defaultRowHeight = 12.00f;// 每一行的高度指定
        float defaultCount = 0.00f;
        for (int i = 0; i < str.length(); i++) {
            float ff = getregex(str.substring(i, i + 1));
            defaultCount = defaultCount + ff;
        }
        return ((int) (defaultCount / fontCountInline) + 1) * defaultRowHeight;// 计算
    }

    public static float getregex(String charStr) {
        if (charStr == " ") {
            return 0.5f;
        }
        // 判断是否为字母或字符
        if (Pattern.compile("^[A-Za-z0-9]+$").matcher(charStr).matches()) {
            return 0.5f;
        }
        
        // 判断是否为全角
        if (Pattern.compile("[u4e00-u9fa5]+$").matcher(charStr).matches()) {
            return 1.00f;
        }
        
        // 全角符号 及中文
        if (Pattern.compile("[^x00-xff]").matcher(charStr).matches()) {
            return 1.00f;
        }
        return 0.5f;
    }
    
    /** 字体/单元格style **/

    /**
     * 获取单元格风格
     * @param wb
     * @return
     */
    public static HSSFCellStyle getCellStyle(HSSFWorkbook wb,String styleName){
        HSSFCellStyle cellStyle = null;
        if("".equals(styleName)){
            
        }else{
            cellStyle = wb.createCellStyle();
            cellStyle.setWrapText(true);
            cellStyle.setAlignment(CellStyle.ALIGN_CENTER);// 水平居中
            cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 垂直居中
            cellStyle.setBorderBottom((short) 1);
            cellStyle.setBorderLeft((short) 1);
            cellStyle.setBorderRight((short) 1);
            cellStyle.setBorderTop((short) 1);
        }
        return cellStyle;
    }
    
    /**
     * 获取默认单元格风格
     * @param wb
     * @return
     */
    public static HSSFCellStyle getCellStyle(HSSFWorkbook wb){
        return getCellStyle(wb,null);
    }
    
    /**
     * 获取单元格风格
     * @param wb
     * @return
     */
    public static HSSFFont getFontStyle(HSSFWorkbook wb,String styleName){
        HSSFFont fontStyle = null;
        if("left_title_1".equals(styleName)){
            fontStyle = wb.createFont();
            fontStyle.setFontName("宋体");
            fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
            fontStyle.setFontHeightInPoints((short) 12);//设置字体大小
        }else{
            
        }
        return fontStyle;
    }
    
    /**
     * 获取默认单元格风格
     * @param wb
     * @return
     */
    public static HSSFFont getFontStyle(HSSFWorkbook wb){
        return getFontStyle(wb,null);
    }
    
    /**
     * 设置合并单元格边框
     * @param i
     * @param cellRangeTitle
     * @param sheet
     * @param workBook
     */
    private static void setBorderForMergeCell(int i, CellRangeAddress cellRangeAddress, int sheetNum, HSSFWorkbook wb){
        RegionUtil.setBorderBottom(i, cellRangeAddress, wb.getSheetAt(sheetNum), wb);
        RegionUtil.setBorderLeft(i, cellRangeAddress, wb.getSheetAt(sheetNum), wb);
        RegionUtil.setBorderRight(i, cellRangeAddress, wb.getSheetAt(sheetNum), wb);
        RegionUtil.setBorderTop(i, cellRangeAddress, wb.getSheetAt(sheetNum), wb);
    }
    
    /**
     * 输出信息到页面
     * @param response
     * @param Msg
     */
    public static void writeMsgToHtml(HttpServletResponse response, String Msg) {
        try {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.write(Msg);
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /** 文件传输   **/
    
    /**
     * 用HSSFWorkbook生成excel文件在服务器
     * @param excelName
     * @param wb
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static boolean generateExcel(String fileName, HSSFWorkbook wb) throws FileNotFoundException, IOException {
        try {
            // 输出文件
            String writeExcelUrl = System.getProperty("catalina.home") + "/webapps/webdav/" + fileName+".xls";
            File fileOut = new File(writeExcelUrl);
            FileOutputStream os = new FileOutputStream(fileOut);
            wb.write(os);
            close(os);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            return false;
        }
        return true;
    }
    
    /**
     * 用HSSFWorkbook生成excel文件在服务器
     * @param excelName
     * @param wb
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static String generateExcel2(String fileName, HSSFWorkbook wb) throws FileNotFoundException, IOException {
        String dz = "";
        try {
            // 输出文件
            String writeExcelUrl = System.getProperty("catalina.home") + "/webapps/webdav/" + fileName+".xls";
            File fileOut = new File(writeExcelUrl);
            FileOutputStream os = new FileOutputStream(fileOut);
            wb.write(os);
            close(os);
            dz = fileName+".xls";
        } catch (IOException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            return "";
        }
        return dz;
    }

    /**
     * 用HSSFWorkbook生成excel文件给用户下载
     * @param excelName
     * @param wb
     * @throws IOException 
     * @throws FileNotFoundException
     * @throws IOException
     */
    public static boolean generateExcel(HttpServletResponse response,String fileName, HSSFWorkbook wb){
        try {
            setResponseHeader(response, fileName);
            OutputStream os = response.getOutputStream();
            wb.write(os);
            close(os);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            //e.printStackTrace();
            return false;
        }
        return true;
    }
    
    /**
     * 关闭输出流
     * @param os
     */
    private static void close(OutputStream os) {
        if (os != null) {
            try {
                os.flush();
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 发送响应流方法
     * @param response
     * @param fileName
     */
    public static void setResponseHeader(HttpServletResponse response, String fileName) {
        try {
            try {
                fileName = new String((fileName+".xls").getBytes("UTF-8"),"ISO8859-1");
                //fileName = new String(fileName.getBytes(),"ISO8859-1");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            response.reset();
            response.setContentType("application/msexcel");
            //response.setContentType("application/octet-stream;charset=ISO8859-1");
            response.setHeader("Content-Disposition", "attachment;filename="+ fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    /**
     * xls打包成zip进行下载
     */
    public String downloads(String[] filepath, HttpServletResponse response,String name) throws IOException, ServletException {
        Date day = new Date();
        SimpleDateFormat df = new SimpleDateFormat("HHmmss");
        // 要生成的压缩文件地址和文件名称
        String fileName = name + df.format(day) + ".zip";
        String path = System.getProperty("catalina.home") + "/webapps/webdav/" + fileName;
        File zipFile = new File(path);
        ZipOutputStream zipStream = null;
        FileInputStream zipSource = null;
        BufferedInputStream bufferStream = null;
        try {
            // 构造最终压缩包的输出流
            zipStream = new ZipOutputStream(new FileOutputStream(zipFile));
            for (int i = 0; i < filepath.length; i++) {
                File file = new File(System.getProperty("catalina.home")
                        + "/webapps/webdav/" + filepath[i]);
                // 将需要压缩的文件格式化为输入流
                zipSource = new FileInputStream(file);
                // 压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样
                ZipEntry zipEntry = new ZipEntry(file.getName());
                // 定位该压缩条目位置,开始写入文件到压缩包中
                zipStream.putNextEntry(zipEntry);
                // 输入缓冲流
                bufferStream = new BufferedInputStream(zipSource, 1024 * 10);
                int read = 0;
                // 创建读写缓冲区
                byte[] buf = new byte[1024 * 10];
                while ((read = bufferStream.read(buf, 0, 1024 * 10)) != -1) {
                    zipStream.write(buf, 0, read);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭流
            try {
                if (null != bufferStream)
                    bufferStream.close();
                if (null != zipStream)
                    zipStream.close();
                if (null != zipSource)
                    zipSource.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return fileName;
        /*
         * //2.获取要下载的文件名 String fileName =
         * path.substring(path.lastIndexOf("\")+1);
         * //3.设置content-disposition响应头控制浏览器以下载的形式打开文件 File fi=new File(path);
         * response.setHeader("Content-Disposition",
         * "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
         * response.addHeader("Content-Length", "" + fi.length());
         * response.setContentType("application/octet-stream"); //4.获取要下载的文件输入流
         * InputStream in = new FileInputStream(fi); int len = 0; //5.创建数据缓冲区
         * byte[] buffer = new byte[1024]; //6.通过response对象获取OutputStream流
         * OutputStream out = response.getOutputStream();
         * //7.将FileInputStream流写入到buffer缓冲区 while ((len = in.read(buffer)) > 0)
         * { //8.使用OutputStream将缓冲区的数据输出到客户端浏览器 out.write(buffer,0,len); }
         * in.close();
         */
    }

    public static void main(String[] args) {
        
    }
}

...

// (后台调用的方法部分)
List<Map<String, Object>> sj = dBSelect(sql); //文件名 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); Date today = new Date(); String appId ="ZB-"; // 中文不行 //b=b.replace("b",""); appId += format.format(today);//.replace("-","").replace(":","").replace(" ","") String [] sxm = {"序号","xmmc", "problemContent", "selfCheckingSituation", "","endTime","","completion",""}; // xmmc, problem_content, self_checking_situation, '', end_time,'',completion,"" // 所属项目 工作内容 完成结果 完成状态 完成时间 协助人 已达成结果和完成程度 备注 if(sj !=null && !sj.isEmpty()){ HSSFWorkbook wb = ExcelUtil2.importExcellModel("/excelModel/WeeklyTemplate.xls"); // 由于 $ 部分需要替换 ExcelUtil2.replaceCellValue(replaceDataMap,wb.getSheetAt(0),5); // 创建一个Excel文件 wb = ExcelUtil2.createHSSFSheet(wb,0, 5,1, sj,sxm); // 创建一个Excel文件 /*HSSFWorkbook wb = ExcelUtil2.createHSSFSheet("/excelModel/rent_collection_import.xls", 2, 1, list, fieldName); */ String ming = ExcelUtil2.generateExcel2(appId,wb); // generateExcel(response对象,导出文件的名字,wb) //ExcelUtil2.generateExcel(getResponse(),appId,wb); // 不用ajax 的方式,其不用返回什么 try{ if(!ming.equals("")){ //导出成功 returnMap.put("ming", ming); } }catch (Exception e) { returnMap.put("status", "-1"); //e.printStackTrace(); }

...

function exportExcel(){ //不用ajax
        var large = mini.get("large").getText();
        var Small = mini.get("Small").getText();
        if(large != null && Small !=null && large != "" && Small !="" ){
            console.log(large);
            window.open("<%=basePath %>exportExcel/exportExcel.do?large="+large+"&Small="+Small);
        }else{
            alert("请输入开始时间与截止时间!!!");
        }
        
    }
    function exportExcel_ajax(){ //用ajax(可以传复杂的参数)
        //alert("!!!!!!!!!!!!!");
        var large = mini.get("large").getText();
        var Small = mini.get("Small").getText();
        if(large != null && Small !=null && large != "" && Small !="" ){
            $.ajax({
                url: "<%=basePath %>exportExcel/exportExcel.do",
                data: {large:large,Small:Small},
                type: "post",
                dataType:'json',
                success: function (text) {
                    if(text.status == '-1') {
                        //console.log("");
                        mini.alert("导出失败或无数据!");
                    }else{
                        var ming = text.ming;
                        <%String webdav = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/webdav/";%>
                        window.open("<%=webdav%>"+ming);
                    }
                                
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    //alert(jqXHR.responseText); 
                    //cancel(); //关闭窗口
                    mini.alert("导出异常!");
                }
            });
        }else{
            alert("请输入开始时间与截止时间!!!");
        }
    }
原文地址:https://www.cnblogs.com/mysterious-killer/p/11947746.html