文档章节

导出excel表格 跨列跨行

贝克街的亡灵sf
 贝克街的亡灵sf
发布于 2016/06/03 11:39
字数 1106
阅读 99
收藏 0

package com.fh.controller.CC;

import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

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.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.hssf.util.Region;
import org.apache.poi.ss.usermodel.CellStyle;
import org.springframework.web.servlet.view.document.AbstractExcelView;

import com.fh.util.PageData;
import com.fh.util.Tools;

public class CcToExcel extends AbstractExcelView{
    @Override
    protected void buildExcelDocument(Map<String, Object> model,
            HSSFWorkbook workbook, HttpServletRequest arg2, HttpServletResponse response)
            throws Exception {
        // TODO Auto-generated method stub
         try{
                Date adate=new Date();
                SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String filename = Tools.date2Str(adate, "yyyyMMddHHmmss");
                String name="考勤汇总报表";
                name=new String(name.toString().getBytes(),"ISO8859-1");
                filename=name+filename;
                response.setContentType("application/octet-stream");
                response.setHeader("Content-Disposition", "attachment;filename="+filename+".xls");
                HSSFWorkbook wb = workbook;    
                HSSFSheet sheet = wb.createSheet( "new sheet");    
                HSSFCellStyle styleTiltle = wb.createCellStyle();   //样式对象 
             // 设置单元格字体 
                HSSFFont font = wb.createFont(); 
                font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 
                font.setFontName("宋体"); 
                font.setFontHeight((short) 300);
                styleTiltle.setFont(font);
                
                HSSFCellStyle style = wb.createCellStyle();   //样式对象 
                style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER );//垂直 
                style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐   
                style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//
                //第一行
                HSSFRow rowTiltle = sheet.createRow(0);//标题
                //第二行
                HSSFRow rowDate = sheet.createRow(1);//时间
                //第三行      列名
                HSSFRow row = sheet.createRow(2);    //列名
                //第四行      列名
                HSSFRow row2 = sheet.createRow(3);   //合并单元格的列名
                
                HSSFCell ceTiltle=rowTiltle.createCell(0);
                HSSFCell ceDate=rowDate.createCell(0);
                ceTiltle.setCellValue("考勤汇总表");
                ceTiltle.setCellStyle(styleTiltle);//
                
                
                
                sheet. addMergedRegion(new Region(0,(short)0,0,(short )20));
                String start=(String) model.get("start");
                String end=(String)model.get("end");
                String itemName=(String)model.get("itemName");
                ceDate.setCellValue("考勤时间"+start+" - "+end+"       制表时间:"+sdf.format(adate)+"    项目名称:"+itemName);
                //四个参数分别是:                                                          起始行, 起始列,  结束行,        结束列 
                sheet.addMergedRegion(new Region(1,(short)0,1,(short )20));
                
                HSSFCell ce=row.createCell(0);  //CC号
                ce.setCellValue("CC号");
                //四个参数分别是:                                                          起始行, 起始列,  结束行,        结束列 
                sheet. addMergedRegion(new Region(2,(short)0,3,(short )0));//跨两行占一列
                ce.setCellStyle(style);
                
                HSSFCell ce1=row.createCell(1);  //姓名
                ce1.setCellValue("姓名");
                sheet. addMergedRegion(new Region(2,(short)1,3,(short )1));
                ce1.setCellStyle(style);
                
                HSSFCell ce2=row.createCell(2);  //出勤天数
                ce2.setCellValue("出勤天数");
                sheet. addMergedRegion(new Region(2,(short)2,2,(short )3));//占一行跨两列
                ce2.setCellStyle(style);
                
                HSSFCell ce3=row2.createCell(2);  //标准
                ce3.setCellValue("标准");
                //四个参数分别是:                                                          起始行, 起始列,  结束行,        结束列 
                sheet. addMergedRegion(new Region(3,(short)2,3,(short )2));//占一行一列
                ce3.setCellStyle(style);
                
                HSSFCell ce4=row2.createCell(3);  //实际
                ce4.setCellValue("实际");
                sheet. addMergedRegion(new Region(3,(short)3,3,(short )3));
                ce4.setCellStyle(style);
                
                HSSFCell ce5=row.createCell(4);  //工作时数
                ce5.setCellValue("工作时数");
                sheet. addMergedRegion(new Region(2,(short)4,2,(short )5));
                ce5.setCellStyle(style);
                
                HSSFCell ce6=row2.createCell(4);  //工作时数  标准
                ce6.setCellValue("标准");
                sheet. addMergedRegion(new Region(3,(short)4,3,(short )4));
                ce6.setCellStyle(style);
                
                HSSFCell ce7=row2.createCell(5);  //工作时数 实际
                ce7.setCellValue("实际");
                sheet. addMergedRegion(new Region(3,(short)5,3,(short )5));
                ce7.setCellStyle(style);
                
                HSSFCell ce8=row.createCell(6);  //未打卡次数  
                ce8.setCellValue("未打卡次数");
                sheet. addMergedRegion(new Region(2,(short)6,2,(short )7));
                ce8.setCellStyle(style);
                
                HSSFCell ce9=row2.createCell(6);  //未打卡次数  上班
                ce9.setCellValue("上班");
                sheet. addMergedRegion(new Region(3,(short)6,3,(short )6));
                ce9.setCellStyle(style);
                
                HSSFCell ce10=row2.createCell(7);  //未打卡次数   下班
                ce10.setCellValue("下班");
                sheet. addMergedRegion(new Region(3,(short)7,3,(short )7));
                ce10.setCellStyle(style);
                
                HSSFCell ce11=row.createCell(8);  //补签卡
                ce11.setCellValue("补签卡");
                sheet. addMergedRegion(new Region(2,(short)8,3,(short )8));
                ce11.setCellStyle(style);
                
                HSSFCell ce12=row.createCell(9);  //迟到
                ce12.setCellValue("迟到");
                sheet. addMergedRegion(new Region(2,(short)9,2,(short )10));
                ce12.setCellStyle(style);
                
                HSSFCell ce13=row2.createCell(9);  //迟到 次数
                ce13.setCellValue("次数");
                sheet. addMergedRegion(new Region(3,(short)9,3,(short )9));
                ce13.setCellStyle(style);
                
                HSSFCell ce14=row2.createCell(10);  //迟到 时间
                ce14.setCellValue("时间");
                sheet. addMergedRegion(new Region(3,(short)10,3,(short )10));
                ce14.setCellStyle(style);
                
                HSSFCell ce15=row.createCell(11);  //早退
                ce15.setCellValue("早退");
                sheet. addMergedRegion(new Region(2,(short)11,2,(short )12));
                ce15.setCellStyle(style);
                
                HSSFCell ce16=row2.createCell(11);  //早退 次数
                ce16.setCellValue("次数");
                sheet. addMergedRegion(new Region(3,(short)11,3,(short )11));
                ce16.setCellStyle(style);
                
                HSSFCell ce17=row2.createCell(12);  //早退 时间
                ce17.setCellValue("时间");
                sheet. addMergedRegion(new Region(3,(short)12,3,(short )12));
                ce17.setCellStyle(style);
                
                HSSFCell ce18=row.createCell(13);  //额外工时
                ce18.setCellValue("额外工时");
                sheet. addMergedRegion(new Region(2,(short)13,3,(short )13));
                ce18.setCellStyle(style);
                
                HSSFCell ce19=row.createCell(14);  //旷工
                ce19.setCellValue("旷工");
                sheet. addMergedRegion(new Region(2,(short)14,2,(short )15));
                ce19.setCellStyle(style);
                
                HSSFCell ce20=row2.createCell(14);  //次数
                ce20.setCellValue("次数");
                sheet. addMergedRegion(new Region(3,(short)14,3,(short )14));
                ce20.setCellStyle(style);
                
                HSSFCell ce21=row2.createCell(15);  //时间
                ce21.setCellValue("时间");
                sheet. addMergedRegion(new Region(3,(short)15,3,(short )15));
                ce21.setCellStyle(style);
                
                HSSFCell ce22=row.createCell(16);  //请假时间
                ce22.setCellValue("请假时间");
                sheet. addMergedRegion(new Region(2,(short)16,3,(short )16));
                ce22.setCellStyle(style);
                
                HSSFCell ce23=row.createCell(17);  //加班
                ce23.setCellValue("加班");
                sheet. addMergedRegion(new Region(2,(short)17,3,(short )17));
                ce23.setCellStyle(style);
                
                HSSFCell ce24=row.createCell(18);  //调休
                ce24.setCellValue("调休");
                sheet. addMergedRegion(new Region(2,(short)18,3,(short )18));
                ce24.setCellStyle(style);
                
                HSSFCell ce25=row.createCell(19);  //外出
                ce25.setCellValue("外出");
                sheet. addMergedRegion(new Region(2,(short)19,3,(short )19));
                ce25.setCellStyle(style);
                
                HSSFCell ce26=row.createCell(20);  //外出
                ce26.setCellValue("节假日");
                sheet. addMergedRegion(new Region(2,(short)20,3,(short )20));
                ce26.setCellStyle(style);
                
                HSSFCellStyle contentStyle = wb.createCellStyle(); //内容样式
                contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
                HSSFCell cell;
                List<PageData> varList = (List<PageData>) model.get("varList");//内容
                int varCount = varList.size();
                for(int i=0; i<varCount; i++){//循环  内容 从第五行开始
                    PageData vpd = varList.get(i);
                    for(int j=0;j<21;j++){//列 
                        String varstr = vpd.getString("var"+(j+1)) != null ? vpd.getString("var"+(j+1)) : "";
                        cell = getCell(sheet, i+4, j);
                        cell.setCellStyle(contentStyle);
                        setText(cell,varstr);
                    }
                    
                }
            } catch(Exception ex){ 
             ex.printStackTrace(); 
            }  
    }
}
 

© 著作权归作者所有

下一篇: 读excel文档
贝克街的亡灵sf
粉丝 2
博文 42
码字总数 21597
作品 0
松江
程序员
私信 提问
Web 报表工具--EasyReport

EasyReport 是一个简单易用的 Web 报表工具。 它的主要功能是把 SQL 语句查询出的行列结构转换成 HTML 表格(Table),并支持表格的跨行(RowSpan)与跨列(ColSpan)。同时它还支持报表 Excel 导出...

TomDeng
2016/10/31
8.6K
4
TomDeng/EasyReport

EasyReport A simple and easy to use Web Report System for java EasyReport是一个简单易用的Web报表工具,它的主要功能是把SQL语句查询出的行列结构转换成HTML表格(Table),并支持表格的跨...

TomDeng
2016/10/28
0
0
如何将表格转成MarkDown格式

相信喜欢使用MarkDown的胖友们一定遇到过这样的情况:在某网站看到一个很不错的总结表格,想要引用一下,但是复制下来发现MarkDown并不支持,自己画出来又太浪费时间,是不是很头疼?今天发现...

Simon_ITer
2016/09/20
108
0
GrapeCity Documents for Excel 文档 API 组件 V2.2 版本发布

GrapeCity Documents for Excel 文档 API 组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF、控制分页和电子表格内容、将 Excel 电子表格的特定页...

葡萄城技术团队
07/16
0
0
React 中合并单元格的正确写法

用表格进行页面布局,页面布局在各种浏览器的的兼容性, 都非常好, 而在react中使用表格布局, 合并单元格的写法比较特殊, 博主查了很久才找到正确的写法, 在这里分享一下 效果图 源码 react组件...

木子昭
01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Aware 到底是什么?

通过如下前序两篇文章: Spring Bean 生命周期之“我从哪里来”? Spring Bean 生命周期之“我要到哪里去”? 我们了解了 Spring Bean 的生命周期核心内容,bean 是如何被初始化变为 Ready fo...

tan日拱一兵
32分钟前
4
0
Android 调用第三方浏览器打开网址或下载文件

/** * 调用第三方浏览器打开 * @param context * @param url 要浏览的资源地址 */ public static void openBrowser(Context context,String url){ final Intent intent = new Intent(); int......

丁佳辉
37分钟前
2
0
PostgreSQL系统表及其TOAST是如何定义的

本文只是讲PG怎样定义系统表,而不是修改系统表甚至是定义自己的系统表。 PG系统表,比如:pg_class、pg_attribute、pg_type 等等 这几个表相互关联,后两者要在pg_class记录自己的表定义,而...

有理想的猪
46分钟前
4
0
总结无线AP与AC之间的各种问题

无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程中还是存在一些问题,下面这些有没有大家碰到的呢? 无线网络搭建中,都说AP+AC的组网模式最现在最先进的,但是在使用过程...

xiangyunyan
51分钟前
3
0
IT兄弟连 Java语法教程 流程控制语句 循环结构语句4

do-while循环 Java还有一种循环是do-while。与for、while这些在循环顶部判断条件表达式的语句不同,do-while是在循环底部进行条件表达式的检查。这意味着do-while循环至少要执行一次循环体。...

老码农的一亩三分地
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部