准备数据
@RequestMapping("/exportjddetail")
public void exportjddetail(HttpServletResponse response,String timeS,String timeE,String ztsName,String zjyflag,String travelId) throws Exception{
OutputStream os = null;
try {// 取得一个输出流
os = response.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
response.reset();// 清空输出流
// 下面是对中文文件名的处理
// 设置相应内容的编码格式
response.setCharacterEncoding("utf-8");
// 把excel文件名的编码格式再设置一下
String name = java.net.URLEncoder.encode("统计"+DateUtils.getTimeCode(), "utf-8");// 这是给excel表格起名字用的
response.setHeader(
"Content-Disposition",
"attachment;filename="
+ new String(name.getBytes("UTF-8"), "GBK") + "."+"xls");
response.setContentType("application/msexcel");// 定义输出类型
if(StringUtil.isFullNull(ztsName)&&StringUtil.isFullNull(zjyflag)){//没有查询条件查询全部
ztsName="";
zjyflag="";
}else
if(!StringUtil.isFullNull(ztsName)&&StringUtil.isFullNull(zjyflag)){
zjyflag="";
}else if(StringUtil.isFullNull(ztsName)&&!StringUtil.isFullNull(zjyflag)){//按照是否查询
ztsName="";
}else{ //两个都不为空 按照名称查询
zjyflag="";
}
Map<String,Object> map=shlogsService.exportjddetail(timeS,timeE,ztsName,zjyflag,travelId);//查询需要到处的数据
//导出数据
List<Map> list = (List)map.get("list");
MergeCell.exportjddetail(os,list);
}
导出方法
/**
* 导出
* @param os
* @param list
* @throws Exception
*/
public static void exportjddetail( OutputStream os,List<Map> list) throws Exception{
//创建workbook
HSSFWorkbook workbook = new HSSFWorkbook();
//创建sheet页
HSSFSheet sheet = workbook.createSheet("统计表");
// sheet.setColumnWidth(0, 20 * 256);
// 生成一个样式
HSSFCellStyle style = workbook.createCellStyle();
// 设置这些样式
style.setAlignment(HorizontalAlignment.CENTER);//水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER);
//创建标题
//创建单元格
HSSFRow row = sheet.createRow(0); //创建第一行
HSSFCell c0 = row.createCell(0); //第一列
c0.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c1 = row.createCell(1);
c1.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c2 = row.createCell(2);
c2.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c3 = row.createCell(3);
c3.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c4 = row.createCell(4);
c4.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c5 = row.createCell(5);
c5.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c6 = row.createCell(6);
c6.setCellValue(new HSSFRichTextString("xx") );
HSSFCell c7 = row.createCell(7);
c7.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c8 = row.createCell(8);
c8.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c9 = row.createCell(9);
c9.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c10 = row.createCell(11);
c10.setCellValue(new HSSFRichTextString("xx"));
HSSFRow row1 = sheet.createRow(1); //第二行
HSSFCell c77 = row1.createCell(9);
c77.setCellValue(new HSSFRichTextString("xx"));
HSSFCell c777 = row1.createCell(10);
c777.setCellValue(new HSSFRichTextString("xx"));
//参数说明:1:开始行 2:结束行 3:开始列 4:结束列
//比如我要合并 第二行到第四行的 第六列到第八列 sheet.addMergedRegion(new CellRangeAddress(1,3,5,7));
// sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 6)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 6, 6)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 7, 7)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 1, 8, 8)) ;
sheet.addMergedRegion(new CellRangeAddress(0, 0, 9, 10)) ;
sheet.addMergedRegion(new CellRangeAddress(2, list.size()+2, 0, 0)) ;
//填充数据
for(int i =0;i<list.size();i++){//行
HSSFRow row8 = sheet.createRow(i+2);
HSSFCell c66 = row8.createCell(0);
c66.setCellValue(new HSSFRichTextString((String)list.get(i).get("unitName")));
HSSFCell c661 = row8.createCell(1);
c661.setCellValue(new HSSFRichTextString(list.get(i).get("ztagency").toString()));
HSSFCell c662 = row8.createCell(2);
c662.setCellValue(new HSSFRichTextString(list.get(i).get("name").toString()));
HSSFCell c663 = row8.createCell(3);
c663.setCellValue(new HSSFRichTextString(list.get(i).get("lifeTime").toString()));
HSSFCell c664 = row8.createCell(4);
c664.setCellValue(new HSSFRichTextString(list.get(i).get("teamNum").toString()));
HSSFCell c665 = row8.createCell(5);
c665.setCellValue(new HSSFRichTextString(list.get(i).get("types").toString()));
HSSFCell c66s = row8.createCell(6);
c66s.setCellValue(new HSSFRichTextString(list.get(i).get("totalMoney").toString()));
HSSFCell c667 = row8.createCell(7);
c667.setCellValue(new HSSFRichTextString(list.get(i).get("zhusnum").toString()));
HSSFCell c668 = row8.createCell(8);
c668.setCellValue(new HSSFRichTextString(list.get(i).get("scenicnum").toString()));
HSSFCell c6677 = row8.createCell(9);
c6677.setCellValue(new HSSFRichTextString(list.get(i).get("ztsMoney").toString()));
HSSFCell c6688 = row8.createCell(10);
c6688.setCellValue(new HSSFRichTextString(list.get(i).get("djsMoney").toString()));
HSSFCell c669 = row8.createCell(11);
c669.setCellValue(new HSSFRichTextString(list.get(i).get("chaxuntime").toString()));
}
//给全部有数据的单元格设置样式
int rowNum=sheet.getLastRowNum();//获得总行数
for(int i=0;i<=rowNum;i++){//行
for(int j=0;j<=11;j++){//列
sheet.setColumnWidth(j, 22*256);
HSSFRow tempRow = sheet.getRow(i);
if(i==0){
tempRow.setHeightInPoints(20);
}else if(i==5){
tempRow.setHeightInPoints(20);
}else{
tempRow.setHeightInPoints(20);
}
HSSFCell cell_temp = tempRow.getCell(j);
if(cell_temp==null){
cell_temp = tempRow.createCell(j);
cell_temp.setCellStyle(style);
}else{
cell_temp.setCellStyle(style);
}
}
}
workbook.write(os);
workbook.close();
os.flush();
os.close();
}