热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Excel报表导出之动态合并单元格

要求:代码:JSP页面代码:

要求:

代码: 

JSP页面代码:



    

            
                讲师津贴明细查询导出
            

            

    

//这个请求千万不要忘记!!!!我会写在最后,这是动态拼Excel表格样式的代码
    ${ctx}/teacherManage/exportMXExcel.do" id="queryTeacherForm" name="fm"  class="form-horizontal">
        


            
                开始日期:                     id="start_date" class="mini-datepicker" format="yyyy-MM-dd"
                    timeFormat="H:mm:ss" showTime="false" allowInput="false" />
              
                    
                结束日期:                     id="end_date" class="mini-datepicker" format="yyyy-MM-dd"
                    timeFormat="H:mm:ss" showTime="false" allowInput="false" />
            
        

    
        

        
导出讲师津贴明细

JS中代码:

mini.parse();

var ctx = mini.get("ctx").getValue();
var form = new mini.Form("#exportForm");
function resetF() {
    form.reset();
}


    //津贴明细导出
function checkOutMX() {
    
    var start_date = mini.get("start_date").getText();
    var end_date = mini.get("end_date").getText();
    if((start_date!=null&&start_date!='') && (end_date != null&&end_date!='')){
        if(start_date>end_date){
            mini.alert("开始时间不能大于结束时间!");
            return;
        }
    }
    
    if(!exportExcelCheckMX()){
        return;
    }
    $("#queryTeacherForm").submit();
}

//津贴明细导出前校验
function exportExcelCheckMX() {
    var flag = false;
    var start_date = mini.get("start_date").getText();
    var end_date = mini.get("end_date").getText();
   
    $.ajax({
        type : 'POST',
        async : false,
        url : ctx + "/teacherManage/exportExcelCheckMX.do",
        data : {
            start_date:start_date,
            end_date:end_date
        },
        dataType : "json",
        success : function(data) {
            if(data.flag == "0"){
                flag = true;
            }else{
                mini.alert(data.msg);
            }
        },
        error : function(e) {
            mini.alert("系统异常,请稍后再试!");
        }
    });
    
    return flag;
}
 

Controller中代码:

/**
             * 讲师津贴明细报表导出前校验
             * @param trainee
             * @return
             * @throws ParseException
             */
            @RequestMapping(value = "/exportExcelCheckMX.do")
            public @ResponseBody ComResultDTO CReportExportExcelCheckMX(HttpServletRequest request,HttpSession session,PageDTO pageDTO){
                logger.info("============讲师津贴明细导出前校验============");
                TeacherManagerDto req = new TeacherManagerDto();
                String start_date = request.getParameter("start_date");
                String end_date = request.getParameter("end_date");
                req.setStart_date(start_date);
                req.setEnd_date(end_date);
                String manage_com =SessionUtil.getUser().getManageCom();
                req.setManage_com(manage_com);
                pageDTO.setParameters(req);
                
                int startNum = (pageDTO.getPageIndex()-1)*pageDTO.getPageSize();
                pageDTO.setStartNum(startNum);
                List queryList = teacherManagerService.selectTeacherChargeByPageDTO(pageDTO);
                ComResultDTO comResultDTO = new ComResultDTO();
                if(queryList != null && queryList.size() > 50000){
                    comResultDTO.setFlag("1");
                    comResultDTO.setMsg("导出报表上限为50000条,数据量过大,导出失败!");
                    logger.info("============导出报表上限为50000条,数据量过大,导出失败!============");
                }else if(queryList != null && queryList.size() == 0){
                    comResultDTO.setFlag("1");
                    comResultDTO.setMsg("导出数据为空,导出失败!");
                    logger.info("============导出数据为空,导出失败!============");
                }else{
                    comResultDTO.setFlag("0");
                }
                return comResultDTO;
            }


service中代码:

@Override
    public List selectTeacherChargeByPageDTO(PageDTO pageDTO) {
        
        return teacherManagerMapper.selectTeacherChargeByPageDTO(pageDTO);
        
    }

mapper.xml中代码:


   
动态拼Excel表格样式的代码:

Controller中代码:

 /**
             * 讲师津贴明细报表导出功能
             * @param requestDTO
             * @param request
             * @param response
             * @throws Exception
             */
            @RequestMapping(value = "/exportMXExcel.do")
            public void CReportExportExcelMX(TeacherManagerDto requestDTO,HttpServletRequest request, 
                    HttpServletResponse response,PageDTO pageDTO)
                            throws Exception {
                String manage_com =SessionUtil.getUser().getManageCom();
                requestDTO.setManage_com(manage_com);
                pageDTO.setParameters(requestDTO);
                //封装搜索引擎参数
                //Map map = new HashMap();
                /*map =*/
                teacherChargeQueryService.reportExcelMX(request,response,pageDTO);
                /*ExcelView viewExcel = new ExcelView();
                HSSFWorkbook arg1= new HSSFWorkbook();
                viewExcel.buildExcelDocument1(map, arg1, request, response);*/
            }
 

Service中代码:

public Map reportExcelMX(HttpServletRequest request, HttpServletResponse response,PageDTO pageDTO) throws Exception {
        
        
    
        // 表头
        //String[] tableHeader = {  "分公司", "中支", "构编编码", "姓名", "人员类别(前线、后线)","讲师类别(专职讲师、督训、兼职讲师)","岗位职级 (xx级督训)", "研发津贴",
        //        "授课津贴","助教津贴","项目津贴","金额合计"};
        
        // 表名
        //String tableName = "讲师津贴明细报表";
        //Map map = new HashMap();
        //map.put("teacherList", teacherList);
        //map.put("tableHeader", tableHeader);
        //map.put("tableName", tableName);
        //return map;
        
        String filename = "TeacherCharge";

        // 获得输出流,该输出流的输出介质是客户端浏览器

        OutputStream output = response.getOutputStream();

        response.reset();

        response.setHeader("Content-disposition", "attachment;filename=" + filename + ".xls");

        response.setContentType("application/msexcel");

        // 创建可写入的Excel工作薄,且内容将写入到输出流,并通过输出流输出给客户端浏览

        WritableWorkbook wk = Workbook.createWorkbook(output);

        /// 创建可写入的Excel工作表

        WritableSheet sheet = wk.createSheet("讲师津贴明细报表", 0);
        sheet.setColumnView(0, 10);
        sheet.setColumnView(1, 15);
        sheet.setColumnView(2, 20);
        sheet.setColumnView(3, 13);
        sheet.setColumnView(4, 13);
        sheet.setColumnView(5, 15);
        sheet.setColumnView(6, 15);
        sheet.setColumnView(7, 15);
        sheet.setColumnView(8, 15);
        sheet.setColumnView(9, 15);
        sheet.setColumnView(10, 15);
        sheet.setColumnView(11, 15);
        sheet.setColumnView(12, 15);
        sheet.setColumnView(13, 15);
        sheet.setColumnView(14, 15);
        sheet.setColumnView(15, 15);
        sheet.setColumnView(16, 15);

        // 把单元格(column, row)到单元格(column1, row1)进行合并。

        // mergeCells(column, row, column1, row1);

        //sheet.mergeCells(0, 0, 5, 0);// 单元格合并方法
        

        // 创建WritableFont 字体对象,参数依次表示黑体、字号12、粗体、非斜体、不带下划线、亮蓝色
        WritableFont titleFont0 = new WritableFont(WritableFont.createFont("宋体"), 18, WritableFont.BOLD, false,
                UnderlineStyle.NO_UNDERLINE, Colour.BLACK);

        WritableFont titleFont1 = new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.BOLD, false,
                UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
        WritableFont titleFont2 = new WritableFont(WritableFont.createFont("宋体"), 11, WritableFont.NO_BOLD, false,
                UnderlineStyle.NO_UNDERLINE, Colour.BLACK);

        // 创建WritableCellFormat对象,将该对象应用于单元格从而设置单元格的样式

        WritableCellFormat titleFormat0 = new WritableCellFormat();
        titleFormat0.setFont(titleFont0);
        titleFormat0.setAlignment(Alignment.CENTRE);
        titleFormat0.setVerticalAlignment(VerticalAlignment.CENTRE);
        titleFormat0.setBorder(Border.ALL, BorderLineStyle.THIN);
        titleFormat0.setWrap(true);

        WritableCellFormat titleFormat1 = new WritableCellFormat();

        // 设置字体格式

        titleFormat1.setFont(titleFont1);

        // 设置文本水平居中对齐

        titleFormat1.setAlignment(Alignment.CENTRE);

        // 设置文本垂直居中对齐

        titleFormat1.setVerticalAlignment(VerticalAlignment.CENTRE);

        // 设置背景颜色

        titleFormat1.setBackground(Colour.YELLOW);
        titleFormat1.setBorder(Border.ALL, BorderLineStyle.THIN);
        // 设置自动换行
        titleFormat1.setWrap(true);

        WritableCellFormat titleFormat2 = new WritableCellFormat();
        titleFormat2.setFont(titleFont2);
        titleFormat2.setAlignment(Alignment.CENTRE);
        titleFormat2.setVerticalAlignment(VerticalAlignment.CENTRE);
        titleFormat2.setWrap(true);
        titleFormat2.setBorder(Border.ALL, BorderLineStyle.THIN);

        /*ClassInfo classInfo = classInfoMapper.selectByPrimaryKey(Long.valueOf(class_id));
        List signlist = classInfoHelperMapper.querySignInTraineeInfoByClassId(Long.valueOf(class_id));*/
        //String[] tableHeader = {  "分公司", "中支", "机构编码", "姓名", "人员类别(前线、后线)","讲师类别(专职讲师、督训、兼职讲师)",
        //"岗位职级 (xx级督训)", "研发津贴",
                //        "授课津贴","助教津贴","项目津贴","金额合计"};
        //sheet.addCell(new Label(0, 0, "讲师津贴明细报表", titleFormat0));
        sheet.addCell(new Label(0, 0, "序号", titleFormat1));
        sheet.addCell(new Label(1, 0, "分公司", titleFormat1));
        sheet.addCell(new Label(2, 0, "中支", titleFormat1));
        sheet.addCell(new Label(3, 0, "机构编码", titleFormat1));
        sheet.addCell(new Label(4, 0, "姓名", titleFormat1));
        sheet.addCell(new Label(5, 0, "人员类别(前线、后线)", titleFormat1));
        sheet.addCell(new Label(6, 0, "讲师类别(专职讲师、督训、兼职讲师)", titleFormat1));
        sheet.addCell(new Label(7, 0, "岗位职级 (xx级督训)", titleFormat1));
        sheet.mergeCells(8, 0, 9, 0);// 单元格合并方法
        sheet.addCell(new Label(8, 0, "研发津贴", titleFormat1));
        /*sheet.addCell(new Label(9, 1, "研发津贴", titleFormat1));*/
        sheet.mergeCells(10, 0, 11, 0);
        sheet.addCell(new Label(10, 0, "授课津贴", titleFormat1));
        /*sheet.addCell(new Label(11, 1, "授课津贴", titleFormat1));*/
        sheet.mergeCells(12, 0, 13, 0);
        sheet.addCell(new Label(12, 0, "助教津贴", titleFormat1));
        /*sheet.addCell(new Label(13, 1, "助教津贴", titleFormat1));*/
        sheet.mergeCells(14, 0, 15, 0);
        sheet.addCell(new Label(14, 0, "项目津贴", titleFormat1));
        /*sheet.addCell(new Label(15, 1, "项目津贴", titleFormat1));*/
        /*sheet.addCell(new Label(16, 1, "金额合计", titleFormat1));*/
        sheet.addCell(new Label(16, 0, "金额合计", titleFormat1));
        
        sheet.addCell(new Label(8, 1, "项目", titleFormat1));
        sheet.addCell(new Label(9, 1, "金额", titleFormat1));
        sheet.addCell(new Label(10, 1, "项目", titleFormat1));
        sheet.addCell(new Label(11, 1, "金额", titleFormat1));
        sheet.addCell(new Label(12, 1, "项目", titleFormat1));
        sheet.addCell(new Label(13, 1, "金额", titleFormat1));
        sheet.addCell(new Label(14, 1, "项目", titleFormat1));
        sheet.addCell(new Label(15, 1, "金额", titleFormat1));
        
        sheet.mergeCells(0, 0, 0, 1);
        sheet.mergeCells(1, 0, 1, 1);
        sheet.mergeCells(2, 0, 2, 1);
        sheet.mergeCells(3, 0, 3, 1);
        sheet.mergeCells(4, 0, 4, 1);
        sheet.mergeCells(5, 0, 5, 1);
        sheet.mergeCells(6, 0, 6, 1);
        sheet.mergeCells(7, 0, 7, 1);
        sheet.mergeCells(16, 0, 16, 1);
        
        List teacherList = TeacherManagerMapper.selectTeacherChargeByPageDTO(pageDTO);
        
        if(teacherList.size()!=0){
            int flag2 = 0 ;
            for (int i = 0; i

                int flag1 = 0 ;
                Long teacher_id =teacherList.get(i).getTeacher_id();
                
                
                List list1 =TeacherManagerMapper.selectChargeType1(teacher_id);
                for (int j = 0; j                     sheet.addCell(new Label(8, 2 + j+flag2, list1.get(j).getCourse_name(), titleFormat2));
                    sheet.addCell(new Label(9, 2 + j+flag2, list1.get(j).getJin_e(), titleFormat2));
                }
                
                    flag1=list1.size();
                
                
                List list2 =TeacherManagerMapper.selectChargeType2(teacher_id);
                for (int j = 0; j                     
                    sheet.addCell(new Label(10, 2 + j+flag2, list2.get(j).getCourse_name(), titleFormat2));
                    sheet.addCell(new Label(11, 2 + j+flag2, list2.get(j).getJin_e(), titleFormat2));
                }
                if(list2.size() > flag1){
                    flag1=list2.size();
                }
                
                List list3 =TeacherManagerMapper.selectChargeType3(teacher_id);
                for (int j = 0; j                     sheet.addCell(new Label(12, 2 + j+flag2, list3.get(j).getCourse_name(), titleFormat2));
                    sheet.addCell(new Label(13, 2 + j+flag2, list3.get(j).getJin_e(), titleFormat2));
                }
            

           if(list3.size() >flag1 ){
                    flag1=list3.size();
                }
                
                List list4 =TeacherManagerMapper.selectChargeType2(teacher_id);
                for (int j = 0; j                     
                    sheet.addCell(new Label(14, 2 + j+flag2, list4.get(j).getCourse_name(), titleFormat2));
                    sheet.addCell(new Label(15, 2 + j+flag2, list4.get(j).getJin_e(), titleFormat2));
                }
                if(list4.size() > flag1){
                    flag1=list4.size();
                }
                sheet.mergeCells(0,2+flag2+i, 0, 2+flag2+flag1-1+i);
                sheet.mergeCells(1,2+flag2+i, 1, 2+flag2+flag1-1+i);
                sheet.mergeCells(2,2+flag2+i, 2, 2+flag2+flag1-1+i);
                sheet.mergeCells(3,2+flag2+i, 3, 2+flag2+flag1-1+i);
                sheet.mergeCells(4,2+flag2+i, 4, 2+flag2+flag1-1+i);
                sheet.mergeCells(5,2+flag2+i, 5, 2+flag2+flag1-1+i);
                sheet.mergeCells(6,2+flag2+i, 6, 2+flag2+flag1-1+i);
                sheet.mergeCells(7,2+flag2+i, 7, 2+flag2+flag1-1+i);
                sheet.mergeCells(16,2+flag2+i,16, 2+flag2+flag1-1+i);
                
                sheet.addCell(new Label(0, 2+flag2, String.valueOf(i + 1), titleFormat2));
                sheet.addCell(new Label(1, 2+flag2, teacherList.get(i).getFen_gongsi(), titleFormat2));
                sheet.addCell(new Label(2, 2+flag2, teacherList.get(i).getZhong_zhi(), titleFormat2));
                sheet.addCell(new Label(3, 2+flag2, teacherList.get(i).getManage_com(), titleFormat2));
                sheet.addCell(new Label(4, 2+flag2, teacherList.get(i).getName(), titleFormat2));
                sheet.addCell(new Label(5, 2+flag2, teacherList.get(i).getIf_employee(), titleFormat2));
                sheet.addCell(new Label(6, 2+flag2, teacherList.get(i).getTeacher_type(), titleFormat2));
                sheet.addCell(new Label(7, 2+flag2, teacherList.get(i).getTeacher_grade(), titleFormat2));
                sheet.addCell(new Label(16,2+flag2, teacherList.get(i).getZongji(), titleFormat2));
                flag2=flag2+(flag1==0?1:flag1);
            }
            
            
        }


        // 添加Label对象,参数依次表示在第一列,第一行,内容,使用的格式

        // Label lab_00=new Label(0,0,"学员考试成绩一览表",titleFormat1);

        // 将定义好的Label对象添加到工作表上,这样工作表的第一列第一行的内容为‘学员考试成绩一览表’并应用了titleFormat定义的样式

        // sheet.addCell(lab_00);
        //
        // WritableCellFormat cloumnTitleFormat=new WritableCellFormat();
        //
        // cloumnTitleFormat.setFont(new
        // WritableFont(WritableFont.createFont("宋体"),10,WritableFont.BOLD,false));
        //
        // cloumnTitleFormat.setAlignment(Alignment.CENTRE);
        //
        // Label lab_01=new Label(0,1,"姓名",cloumnTitleFormat);
        //
        // Label lab_11=new Label(1,1,"班级",cloumnTitleFormat);
        //
        // Label lab_21=new Label(2,1,"笔试成绩",cloumnTitleFormat);
        //
        // Label lab_31=new Label(3,1,"上机成绩",cloumnTitleFormat);
        //
        // Label lab_41=new Label(4,1,"考试日期",cloumnTitleFormat);
        //
        // sheet.addCell(lab_01);
        //
        // sheet.addCell(lab_11);
        //
        // sheet.addCell(lab_21);
        //
        // sheet.addCell(lab_31);
        //
        // sheet.addCell(lab_41);
        //
        // sheet.addCell(new Label(0,2,"李明"));
        //
        // sheet.addCell(new Label(1,2,"As178"));

        // 定义数字格式

        // NumberFormat nf=new NumberFormat("0.00");
        //
        // WritableCellFormat wcf=new WritableCellFormat(nf);

        // 类似于Label对象,区别Label表示文本数据,Number表示数值型数据

        // Number numlab_22=new Number(2,2,78,wcf);
        //
        // sheet.addCell(numlab_22);
        //
        // sheet.addCell(newNumber(3,2,87,new WritableCellFormat(new
        // NumberFormat("#.##") )));

        // 定义日期格式
        //
        // DateFormat df=new DateFormat("yyyy-MM-dd hh:mm:ss");

        // 创建WritableCellFormat对象

        // WritableCellFormat datewcf=new WritableCellFormat(df);

        // 类似于Label对象,区别Label表示文本数据,DateTime表示日期型数据

        // DateTime dtLab_42=new DateTime(4,2,new Date(),datewcf);
        //
        // sheet.addCell(dtLab_42);

        // 将定义的工作表输出到之前指定的介质中(这里是客户端浏览器)

        wk.write();

        // 操作完成时,关闭对象,释放占用的内存空间

        wk.close();
        // 加下划线这部分代码是B/S模式中采用的输出方式,而不是输出到本地指定的磁盘目录。该代码表示将temp.xls的Excel文件通过应答实体(response)输出给请求的客户端浏览器,下载到客户端本地(保存或直接打开)。若要直接输出到磁盘文件可采用下列代码替换加下划线这部分代码
        // File file=new File("D://temp.xls");
        // WritableWorkbook wwb = Workbook.createWorkbook(file);

        return null;

    }
四个红色下划线需要的SQL语句查询:


   
 
   
   
   
   
   

 

 

 


 


推荐阅读
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
author-avatar
ho世英雄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有