最近遇到一个导出,相当麻烦。我也查询了很多博客,并根据其中一篇博客进行修改,达到了最终想要的效果。话不多说,直接上效果图
上面的代码:
1、主要代码:
ListMapString,对象convertListMap=toListConvertListMap(tableTitleList,列表);
//第一步创建一个Excel文件对应的Workbook
XSSFWorkbook wb=new XSSFWorkbook();
//第二步,在Workbook中添加一个sheet,对应Excel文件中的sheet。
XSSFSheet Sheet=wb.createSheet('sheet');
//第三步设置样式和字体样式
XSSFCellStyle titleStyle=createTitleCellStyle(wb);
XSSFCellStyle headerStyle=createHeadCellStyle(wb);
XSSFCellStyle contentStyle=createContentCellStyle(wb);
//电话号码
int 行数=0;
//创建第一页第一行,索引从0开始
XSSFRow row0=sheet.createRow(rowNum++);
row0.setHeight((short) 600);//设置行高
sheet.setColumnWidth(2, 8000);
sheet.setColumnWidth(3, 8000);
//第二行
XSSFRow row2=sheet.createRow(rowNum++);
row2.setHeight((短)700);
//todo: 第三行
XSSFRow row3=Sheet.createRow(rowNum++);
row3.setHeight((短)700);
字符串[] row_one=null;
字符串[] row_two=null;
字符串[] row_ Three=null;
int 单元格大小=0;
if (tableTitleList.size()==2) { //全部
row_one=new String[]{'序列号', '模块', '单元名称', '统计数据', '总计', '', '',
'测试类型A', '', '', '', '', '', '', '', '', '', '', '',
'测试类型B', '', '', '', '', '', '', '', '', '', '', '',};
row_two=new String[]{'', '', '', '', '总计A', '总计B', '总计C',
'测试类型A1', '', '', '',
'测试类型A2', '', '', '',
'测试类型A3', '', '', '',
'测试类型B1', '', '', '',
'测试类型B2', '', '', '',
'测试类型B3', '', '', ''};
row_two=new String[]{'', '', '', '', '', '', '',
‘起床’、‘洗漱’、‘吃饭’、‘上班’、
‘起床’、‘洗漱’、‘吃饭’、‘上班’、
‘起床’、‘洗漱’、‘吃饭’、‘上班’、
‘起床’、‘洗漱’、‘吃饭’、‘上班’、
‘起床’、‘洗漱’、‘吃饭’、‘上班’、
'起床','洗漱','吃饭','上班',};
//合并单元格
提取(表);
}
//创建第一行单元格
for (int i=0; i row_one.length; i++) {
XSSFCell c00=row0.createCell(i);
c00.setCellValue(row_one[i]);
c00.setCellStyle(headerStyle);
}
//创建第二行单元格
for (int i=0; i row_two.length; i++) {
XSSFCell tempCell=row2.createCell(i);
tempCell.setCellValue(row_two[i]);
tempCell.setCellStyle(headerStyle);
}
//创建第三行单元格
for (int i=0; i row_ Three.length; i++) {
XSSFCell tempCell=row3.createCell(i);
tempCell.setCellValue(row_ Three[i]);
tempCell.setCellStyle(headerStyle);
}
//设置表头单元格的宽度
表标题样式列宽度(表);
//todo: 填写数据
approvalMethodfillInData(convertListMap,sheet,contentStyle,rowNum,row_two,tableTitleList);//approvalMethodfillInData(convertListMap,sheet,contentStyle,rowNum,cellSize,tableTitleList);
//导出到浏览器下载
buildExcelDocument('监控数据.xlsx', wb, response);
2. 合并单元格
私有静态无效提取(XSSFSheet 表){
//todo:合并参数为:起始行、结束行、起始列、结束列
//将第一行合并到第一列的第三行
sheet.addMergedRegion(new CellRangeAddress(0, 2, 0, 0));
//合并第二列的第一行到第三行
sheet.addMergedRegion(new CellRangeAddress(0, 2, 1, 1));
//将第一行合并到第三行第三列
sheet.addMergedRegion(new CellRangeAddress(0, 2, 2, 2));
sheet.addMergedRegion(new CellRangeAddress(0, 2, 3, 3));
//全部的
sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 6));
//总计下的单元格
sheet.addMergedRegion(new CellRangeAddress(1, 2, 4, 4));
sheet.addMergedRegion(new CellRangeAddress(1, 2, 5, 5));
sheet.addMergedRegion(new CellRangeAddress(1, 2, 6, 6));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 7, 18));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 19, 30));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 7, 10));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 11, 14));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 15, 18));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 19, 22));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 23, 26));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 27, 30));
}3.设置表头单元格的宽度
私有静态无效tableTitleStyleColumnwidth(XSSFSheet表){
sheet.setColumnWidth(2, 8000);
sheet.setColumnWidth(3, 8000);
sheet.setColumnWidth(7, 3000);
sheet.setColumnWidth(8, 3000);
sheet.setColumnWidth(9, 3000);
sheet.setColumnWidth(10, 3000);
sheet.setColumnWidth(11, 3000);
sheet.setColumnWidth(12, 3000);
sheet.setColumnWidth(13, 3000);
sheet.setColumnWidth(14, 3000);
sheet.setColumnWidth(15, 3000);
sheet.setColumnWidth(16, 3000);
sheet.setColumnWidth(17, 3000);
sheet.setColumnWidth(18, 3000);
sheet.setColumnWidth(19, 3000);
sheet.setColumnWidth(20, 3000);
sheet.setColumnWidth(21, 3000);
sheet.setColumnWidth(22, 3000);
sheet.setColumnWidth(23, 3000);
sheet.setColumnWidth(24, 3000);
sheet.setColumnWidth(25, 3000);
sheet.setColumnWidth(26, 3000);
sheet.setColumnWidth(27, 3000);
sheet.setColumnWidth(28, 3000);
sheet.setColumnWidth(29, 3000);
sheet.setColumnWidth(30, 3000);
}4.填写数据(注:这里的数据格式为ListMapString,Object类型,您可以根据自己的实际情况封装数据)
私人静态无效的approvalMethodfillInData(ListMapString,对象convertListMap,XSSFSheet工作表,XSSFCellStyle contentStyle,int rowNum,String [] cellSize,列表
for (MapString, 对象映射: ConvertListMap) {
XSSFRow tempRow=Sheet.createRow(rowNum++);
tempRow.setHeight((短) 500);
//判断选择类型
if (tableTitleList.size()==2 || 'enterprise'.equals(tableTitleList.get(0).toString())) {
//循环单元格填充数据
for (int i=0; i cellSize.length; i++) {
//列宽自适应,j为自适应列,true表示自适应,false表示不自适应,默认不自适应
sheet.autoSizeColumn(i, true);
XSSFCell tempCell=tempRow.createCell(i);
tempCell.setCellStyle(contentStyle);
字符串临时值='';
开关(一){
案例0:
tempValue=map.get('indexNum').toString();
休息;
案例1:
tempValue=map.get('platName').toString();
休息;
案例2:
tempValue=map.get('deptName').toString();
休息;
案例3:
tempValue=map.get('type').toString();
休息;
案例4:
tempValue=map.get('totalProNum').toString();
休息;
案例5:
tempValue=map.get('totalBidNum').toString();
休息;
案例6:
tempValue=map.get('totalAmount').toString();
休息;
案例7:
tempValue=map.get('enterpriseEngineeringProNum').toString();
休息;
案例8:
tempValue=map.get('enterpriseEngineeringBidNum').toString();
休息;
案例9:
tempValue=map.get('企业采购金额').toString();
休息;
案例10:
tempValue=map.get('planEnterprisePurchaseAmount').toString();
休息;
案例11:
tempValue=map.get('enterprisePurchaseProNum').toString();
休息;
案例12:
tempValue=map.get('enterprisePurchaseBidNum').toString();
休息;
案例13:
tempValue=map.get('企业采购金额').toString();
休息;
案例14:
tempValue=map.get('planEnterprisePurchaseAmount').toString();
休息;
案例15:
tempValue=map.get('enterpriseServiceProNum').toString();
休息;
案例16:
tempValue=map.get('enterpriseServiceBidNum').toString();
休息;
案例17:
tempValue=map.get('enterpriseServiceAmount').toString();
休息;
案例18:
tempValue=map.get('planEnterpriseServiceAmount').toString();
休息;
案例19:
tempValue=map.get('groupEngineeringProNum').toString();
休息;
案例20:
tempValue=map.get('grouppurchaseBidNum').toString();
休息;
案例21:
tempValue=map.get('groupPurchaseAmount').toString();
休息;
案例22:
tempValue=map.get('palnGroupPurchaseAmount').toString();
休息;
案例23:
tempValue=map.get('groupPurchaseProNum').toString();
休息;
案例24:
tempValue=map.get('groupEngineeringBidNum').toString();
休息;
案例25:
tempValue=map.get('groupEngineeringAmount').toString();
休息;
案例26:
tempValue=map.get('planGroupEngineeringAmount').toString();
休息;
案例27:
tempValue=map.get('groupServiceProNum').toString();
休息;
案例28:
tempValue=map.get('groupServiceBidNum').toString();
休息;
案例29:
tempValue=map.get('groupServiceAmount').toString();
休息;
案例30:
tempValue=map.get('planGroupServiceAmount').toString();
休息;
}
tempCell.setCellValue(tempValue);
}
}}
5.Web下载并导出到浏览器
私有静态无效buildExcelDocument(字符串文件名,工作簿wb,HttpServletResponse响应){
尝试{
response.setContentType('application/octet-stream');
//可以自己定义编码格式
response.setHeader('Content-Disposition', 'attachment;filename=' + URLEncoder.encode(fileName, 'utf-8'));
//清除jsp编译的html文件中的空格,防止excel中出现空行
响应.flushBuffer();
//写出
wb.write(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
} 最后{
IOUtils.closeQuietly(wb);
}
}
6.提供标题样式、内容样式和标题样式
/**
*创建标题样式
*
* @参数wb
* @返回
*/
私有静态XSSFCellStyle createTitleCellStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyle=wb.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直对齐
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//cellStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());//背景颜色
XSSFFont headerFont1=(XSSFFont) wb.createFont(); //创建字体样式
headerFont1.setBold(true); //粗体
headerFont1.setFontName('Helvetica'); //设置字体类型
headerFont1.setFontHeightInPoints((短) 15); //设置字体大小
cellStyle.setFont(headerFont1); //设置标题样式的字体样式
返回单元格样式;
}
/**
*创建标题样式
*
* @参数wb
* @返回
*/
私有静态XSSFCellStyle createHeadCellStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyle=wb.createCellStyle();
cellStyle.setWrapText(true);//设置自动换行
cellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景颜色
cellStyle.setAlignment(HorizontalAlignment.CENTER); //水平居中
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //垂直对齐
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//cellStyle.setBottomBorderColor(IndexedColors.BLACK.index);
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
cellStyle.setBorderRight(BorderStyle.THIN); //右边框
cellStyle.setBorderTop(BorderStyle.THIN); //上边框
XSSFFont headerFont=(XSSFFont) wb.createFont(); //创建字体样式
headerFont.setBold(true); //粗体
headerFont.setFontName('Helvetica'); //设置字体类型
headerFont.setFontHeightInPoints((短) 12); //设置字体大小
cellStyle.setFont(headerFont); //设置标题样式的字体样式
返回单元格样式;
}
/**
* 创建内容样式
*
* @参数wb
* @返回
*/
私有静态XSSFCellStyle createContentCellStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyle=wb.createCellStyle();
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
cellStyle.setWrapText(true);//设置自动换行
cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
cellStyle.setBorderLeft(BorderStyle.THIN); //左边框
cellStyle.setBorderRight(BorderStyle.THIN); //右边框
cellStyle.setBorderTop(BorderStyle.THIN); //上边框
//生成12号字体
XSSFFont 字体=wb.createFont();
字体.setColor((短)8);
font.setFontHeightInPoints((短) 12);
cellStyle.setFont(字体);
返回单元格样式;
}至此,你就完成了!如果您有好的实现方法,请分享!