添加maven依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13-beta1</version>
</dependency>
主体代码
package net.sppan.base;
import javax.servlet.http.HttpServletResponse;
import com.ecopro.base.ResultData;
import com.ecopro.utils.CollectionUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.CellRangeAddress;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* Author: SamGroves
* <p>
* Description: 创建excel表格,导出数据
* <p>
* Date: 2017/10/28
*/
public class CreateExcel {
@SuppressWarnings({ "deprecation" })
public void guancha(
ResultData<List<Map<String, Object>>> dataset,// 接收数据
HttpServletResponse response) {
HSSFWorkbook workBook = new HSSFWorkbook();// 创建excel工作簿
// 设置表头字体样式
HSSFFont headfont = workBook.createFont();
headfont.setFontName("黑体");
headfont.setFontHeightInPoints((short) 22);// 字体大小
headfont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
HSSFCellStyle headstyle = workBook.createCellStyle();
headstyle.setFont(headfont);
headstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
headstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
headstyle.setLocked(true);
headstyle.setWrapText(true);// 自动换行
// 设置列头字体样式
HSSFFont columnHeadFont = workBook.createFont();
columnHeadFont.setFontName("宋体");
columnHeadFont.setFontHeightInPoints((short) 11);
columnHeadFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置列头的样式
HSSFCellStyle columnHeadStyle = workBook.createCellStyle();
columnHeadStyle.setFont(columnHeadFont);
columnHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
columnHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
columnHeadStyle.setLocked(true);
columnHeadStyle.setWrapText(true);
HSSFFont font = workBook.createFont();
font.setFontName("Arial");
font.setFontHeightInPoints((short) 11);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置普通单元格样式
HSSFCellStyle style = workBook.createCellStyle();
style.setFont(font);
style.setAlignment(HSSFCellStyle.ALIGN_LEFT);// 左右居中
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_TOP);// 上下居中
style.setWrapText(true);
HSSFCellStyle centerstyle = workBook.createCellStyle();
centerstyle.setFont(font);
centerstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
centerstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
centerstyle.setWrapText(true);
// 时间样式
HSSFFont font1 = workBook.createFont();
font1.setFontName("Arial");
font1.setFontHeightInPoints((short) 10);
font1.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle timeStyle = workBook.createCellStyle();
timeStyle.setFont(font1);
timeStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 左右居中
timeStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中
HSSFSheet sheet = workBook.createSheet();// 创建一个工作表sheet
// 对第一行做处理,标题的创建
HSSFRow row = sheet.createRow(0);// 创建第一行
row.setHeight((short) 600);// 设置表格行的高度
HSSFCell cell0 = row.createCell(0);
cell0.setCellValue(new HSSFRichTextString("充值记录统计表"));// 设置表名
cell0.setCellStyle(headstyle);
/**
* 合并单元格
* 第一个参数:第一个单元格的行数(从0开始)a
* 第二个参数:第二个单元格的行数(从0开始)b
* 第三个参数:第一个单元格的列数(从0开始)c
* 第四个参数:第二个单元格的列数(从0开始)d
* 合并 a行c列 的那一个单元格 到 b行d列 的那一个单元格
*/
CellRangeAddress range = new CellRangeAddress(0, 0, 0, 9);
sheet.addMergedRegion(range);
HSSFRow row2 = sheet.createRow(1);
row2.setHeight((short) 500);
HSSFCell cell = null;
String[] headers = { "时间", "充值订单号","用户ID", "用户姓名", "银行卡号", "充值金额"};
// 插入第一行数据标题
for (int i = 0; i < headers.length; i++) {
cell = row2.createCell(i);
cell.setCellValue(headers[i]);
cell.setCellStyle(columnHeadStyle);
sheet.setColumnWidth(i, 5500);
}
// 数据的处理中最好每一行都判断是否为空,以免出现空指针错误
// 转字符型的时候最好用String.ValueOf()方法
if (CollectionUtils.isNotEmpty(dataset.getData())) {
for (int i = 0; i < dataset.getData().size(); i++) {
HSSFRow nextRow = sheet.createRow(i + 2);
nextRow.createCell(0).setCellValue(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(dataset.getData().get(i)
.getCreatedAt()));
nextRow.createCell(1).setCellValue(
dataset.getData().get(i).getOrderId());
nextRow.createCell(2).setCellValue(
dataset.getData().get(i).getUserId());
nextRow.createCell(3).setCellValue(
dataset.getData().get(i).getAcname());
nextRow.createCell(4).setCellValue(
dataset.getData().get(i).getAcno());
nextRow.createCell(5).setCellValue(
dataset.getData().get(i).getAmt()
.doubleValue());
nextRow.createCell(6).setCellValue(
dataset.getData().get(i).getStatus().name());
}
}
// 设置输出文本格式及名称
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmss");
String title = format.format(new Date()) + ".xls";
response.reset();
response.setHeader("Content-disposition", "attachment; filename="
+ title);
response.setContentType("application/msexcel");
try {
ServletOutputStream out = response.getOutputStream();
workBook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
前端调用
#if(!$detailRecords)
#else
<button>
<a href="#" onclick="if(true){
href='/coupon/exportExcelOfDealRecord?&telephone=$!telephone&type=$!type&status=$!status&startDate=$!dateFormatUtils.date2String($!startDate,'YYYY-MM-dd')&endDate=$!dateFormatUtils.date2String($!endDate,'YYYY-MM-dd')'}">导出查询结果</a>
</button>
#end