4.java项目页面导出excel功能

用的是SSM框架,字段根据自己的业务需求改

1.前台页面

 <a  class="btn btn btn-primary"  onclick=downloadExcel() style=" margin:15px 0px 0px 55px">导出</a>

<form action="sourceRecord/downloadExcel" id="dynamicDownload" method="post">
        <input type="hidden" value="${date_start }" id="inpstart" name="inpstart">
        <input type="hidden" value="${date_end }" id="inpend" name="inpend">
        <input type="hidden" value="${userORname }" id="userORname" name="userORname">
        <input type="hidden" value="${PART_NAME }" id="dId" name="dId">
</form>

  /*导出按钮提交*/
  function downloadExcel(){
      $("#dynamicDownload").submit();
  }

2.后台相关代码

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;

    /**
     * 导出考勤记录
     * @param request
     * @param response
     * @param model
     */
@RequestMapping(value="downloadExcel")
public void downLoadExcel(HttpServletRequest request,HttpServletResponse response,Model model){
      try{
         //1-查出要导出的数据
        String user_id = request.getSession().getAttribute("user_id").toString();//获取保存登陆信息的员工id
        HashMap<String, Object> paramMap = new HashMap<String, Object>();
        String date_start1 = request.getParameter("inpstart");
    String date_end1 = request.getParameter("inpend");
    String userORname1 = request.getParameter("userORname");
    String PART_NAME1 = request.getParameter("dId");
    paramMap.put("date_start", date_start1);
        paramMap.put("date_end", date_end1);
    paramMap.put("userORname", userORname1);
    paramMap.put("PART_NAME", PART_NAME1);
    List<Map<String, Object>> sourceRecordList=sourceRecordService.selectSourceRecordNotpage(paramMap);
         //第一步,创建一个webbook,对应一个Excel文件
        HSSFWorkbook wk = new HSSFWorkbook();
        //第二步,创建一个sheet表对象,创建row对象,getExcelStyle1是一个创建模板的方法,最后面有
    HSSFSheet sheet = getExcelStyle1(wk,"考勤信息表");
        HSSFRow row;
    HSSFCellStyle style = wk.createCellStyle();
    HSSFFont font = wk.createFont();
    font.setFontName("微软雅黑");
    font.setFontHeightInPoints((short)15);
    style.setFont(font);
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        //第三步,查询出表内容放到map中
    SimpleDateFormat sdf_out = new SimpleDateFormat("yyyyMMdd");
    String time_out = sdf_out.format(new Date());
    String srcPath=request.getSession().getServletContext().getRealPath("")+"/考勤信息"+time_out+".xls";//设置将excel数据上传至服务器的路径
         for(int i=0;i<sourceRecordList.size();i++){
                row=sheet.createRow(i+1);//从第二行还是导入数据
                String USER_ID = sourceRecordList.get(i).get("USER_ID").toString();//查询列表中获取所需字段数据
                String USER_NAME = sourceRecordList.get(i).get("USER_NAME").toString();
                String PART_NAME = sourceRecordList.get(i).get("PART_NAME").toString();
                String ATTENDANCETEAM_NAME = sourceRecordList.get(i).get("ATTENDANCETEAM_NAME").toString();
                String POST_NAME = sourceRecordList.get(i).get("POST_NAME").toString();
                String ATTENDANCE_DATE = sourceRecordList.get(i).get("ATTENDANCE_DATE").toString();
                String ATTENDANCE_TIME = sourceRecordList.get(i).get("ATTENDANCE_TIME").toString();
                String EQUIPMENT_ADDRESS = sourceRecordList.get(i).get("EQUIPMENT_ADDRESS").toString();
                
                if(USER_ID !=null){
                    row.createCell((short)0).setCellValue(USER_ID);
                }else{
                    row.createCell((short)0).setCellValue("");
                }
                if(USER_NAME !=null){
                    row.createCell((short)1).setCellValue(USER_NAME);
                }else{
                    row.createCell((short)1).setCellValue("");
                }
                if(PART_NAME !=null){
                    row.createCell((short)2).setCellValue(PART_NAME);
                }else{
                    row.createCell((short)2).setCellValue("");
                }
                if(ATTENDANCETEAM_NAME !=null){
                    row.createCell((short)3).setCellValue(ATTENDANCETEAM_NAME);
                }else{
                    row.createCell((short)3).setCellValue("");
                }
                if(POST_NAME !=null){
                    row.createCell((short)4).setCellValue(POST_NAME);
                }else{
                    row.createCell((short)4).setCellValue("");
                }
                if(ATTENDANCE_DATE !=null){
                    row.createCell((short)5).setCellValue(ATTENDANCE_DATE);
                }else{
                    row.createCell((short)5).setCellValue("");
                }
                if(ATTENDANCE_TIME !=null){
                    row.createCell((short)6).setCellValue(ATTENDANCE_TIME);
                }else{
                    row.createCell((short)6).setCellValue("");
                }
                if(EQUIPMENT_ADDRESS !=null){
                    row.createCell((short)7).setCellValue(EQUIPMENT_ADDRESS);
                }else{
                    row.createCell((short)7).setCellValue("");
                }
            }
            try {
                FileOutputStream fout = new FileOutputStream(srcPath);//创建一个服务器管道地址
                wk.write(fout);//把excel数据写到服务器中
                //读服务器中的数据
                File exportFile = new File(srcPath);
                FileInputStream fs=null;
                //告诉浏览器这次请求是一个下载的数据流
                response.setContentType("APPLICATION/OCTET-STREAM");
                fs=new FileInputStream(exportFile);
                                //ExportUtil是一个下载的工具类,后面会有
                ExportUtil.download(response, fs, "考勤信息-"+time_out+".xls",null);
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
            
        }catch(Exception e){
            e.printStackTrace();
            
        }
        
        
    }
}

    /**
     * 创建一个excel模板:里面有表头信息
     */
    public HSSFSheet getExcelStyle1(HSSFWorkbook wk,String name){
        HSSFSheet sheet = wk.createSheet(name);
        //设置表的样式 新加一行
        HSSFRow row1 = sheet.createRow((int) 0);
        HSSFCellStyle style1 = wk.createCellStyle();
        style1.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        HSSFFont font1 = wk.createFont();
        font1.setFontName("微软雅黑");
        font1.setFontHeightInPoints((short)12);
        style1.setFont(font1);
        row1.createCell((short)0).setCellValue("工号");
        row1.createCell((short)1).setCellValue("姓名");
        row1.createCell((short)2).setCellValue("部门");
        row1.createCell((short)3).setCellValue("所属考勤组");
        row1.createCell((short)4).setCellValue("岗位名称");
        row1.createCell((short)5).setCellValue("日期");
        row1.createCell((short)6).setCellValue("打卡时间");
        row1.createCell((short)7).setCellValue("设备地址");
        return sheet;
    }

ExportUtil 下载的工具类

    import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;

public class ExportUtil {

    /**
     * 导出文件
     * 
     * @param response
     * @param file
     *            导出文件
     * @param name
     * @param contentType
     * @throws IOException
     */
    public static void download(HttpServletResponse response, File file,
            String name, String contentType) throws IOException {
        String fileName = StringUtils.isBlank(name) ? file.getName() : name;
        download(response, new FileInputStream(file), fileName, contentType);
    }

    /**
     * 下载数据/文件
     * 
     * @param response
     *            HTTP输出
     * @param inputStream
     *            文件流
     * @param fileName
     *            文件名
     * @param contentType
     *            ContentType in HTTP Header
     * @throws IOException
     *             IO异常
     */
    public static void download(HttpServletResponse response,
            InputStream inputStream, String fileName, String contentType)
            throws IOException {

        response.setContentType(StringUtils.isEmpty(contentType) ? "application/octet-stream"
                : contentType);
        response.setHeader("Content-Disposition", "attachment;filename="
                + new String(fileName.getBytes("gbk"), "ISO-8859-1"));
        response.setStatus(HttpServletResponse.SC_OK);

        BufferedInputStream reader = null;
        try {
            reader = new BufferedInputStream(inputStream);
            IOUtils.copy(reader, response.getOutputStream());
        } finally {
            if (reader != null) {
                reader.close();
            }
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352