JSP
window.location = appContext + "/syzcdDksqxxb/export.do?parameter=" + JSON.stringify(form.getData());
}
contro
public void export(SyzcdDksqxxbVO vo, HttpServletResponse response, HttpServletRequest request) throws IOException {
logger.info("导出");
String message = "导出失败";
String parameter = request.getParameter("parameter");
vo = JSONObject.parseObject(parameter, SyzcdDksqxxbVO.class);
List<SyzcdDksqxxbVO> list = iSyzcdDksqxxbService.queryShow(vo);
if (list.size() == 0) {
message = "没有需要导出的信息";
}
// 保存数据
List<String[]> dataList = new ArrayList<>();
for (SyzcdDksqxxbVO listEach : list) {
String[] dataArr = listEach.getData().split(",");
dataList.add(dataArr);
}
// 导出文件名称
String title = "贷款申请信息文件明细表";
String date = DateUtil.getDate();
String fileName = title + date + ".xls";
// 表头,格式:[projectid=-3f21ad94.155a4d67453.-7cc5, planitemid=-3f21ad94.155a2267453.-7cc5, contractid=171100000992, applyid=fffffff, supplierid=10013513, suppliername=沈阳xxx有限公司, bankname=银行名称, accountname=, accountnumber=, receiveaccaname=, receiveaccno=, contactname=test, contactphone=183xxxxxxxx, confirmamount=1000, fristintime=20191205, lastuptime=20191211, byzd1=, byzd2=, byzd3=, byzd4=, byzd5=]
String[] header = {"项目id", "包组id", "合同id", "申请id", "供应商id", "供应商名称", "开户行", "开户人名称(回款卡)", "开户账号(回款卡)", "开户人名称(贷款卡)", "开户账号(贷款卡)", "供应商联系人姓名", "供应商联系电话", "供应商确认金额",
"首次登记时间", "最后更新时间", "贷款额度", "备注说明", "拒绝原因", "供应商中标金额", "备用5"};
try {
message = new Export().Export(response, fileName, title, header, dataList);
response.setContentType("text/html;charset=UTF-8");
} catch (Exception e) {
e.printStackTrace();
message = "信息写入Excel失败";
} finally {
}
}
Excel
public class Export {
public String Export(HttpServletResponse response, String fileName,String title, String[] header, List<String[]> dataList) throws Exception {
int loanNum = 0;// 贷款总额
OutputStream os = response.getOutputStream();// 取得输出流
response.reset();// 清空输出流
fileName = URLEncoder.encode(fileName, "ISO-8859-1");
fileName = URLEncoder.encode(fileName, "ISO-8859-1");
// 定义输出类型(下载)
response.setHeader("Content-disposition", "attachment; filename=ApplInfo"+DateUtil.getDate());// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
// 创建可以写入的Excel工作薄(默认运行生成的文件在tomcat/bin下 )
WritableWorkbook wwb = Workbook.createWorkbook(os);
int length = dataList.size(); // 查询结果记录数
// 设置每个sheet显示的记录数
int sheetSize = 5000;
// 有多少个sheet
int sheetNum = 1;
// 计算要创建的sheet个数
if (length % sheetSize > 0) {
sheetNum = length / sheetSize + 1;
} else {
sheetNum = length / sheetSize;
}
for (int kk = 0; kk < sheetNum; kk++) {
// 生成工作表,(name:First Sheet,参数0表示这是第一页)
WritableSheet sheet = wwb.createSheet(("sheet" + (kk + 1)), kk);
// 设置excel标题
sheet.mergeCells(0, 0, header.length - 1, 0); // 为表头合并单元格
// sheet.mergeCells(0, 1, 1, 1);
WritableFont wfont = new WritableFont(WritableFont.createFont("宋体"), 20, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.GREEN);
WritableCellFormat wcfFC = new WritableCellFormat(wfont);
wcfFC.setAlignment(Alignment.CENTRE); // 设置对齐方式
sheet.addCell(new Label(0, 0, title, wcfFC));
sheet.setRowView(0, 600);// 将第一行的高度设为600
// 设置header样式(楷体_GB2312)
WritableFont headerfont = new WritableFont(WritableFont.createFont("黑体"), 11, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLUE);
WritableCellFormat headerCell = new WritableCellFormat(headerfont);
headerCell.setAlignment(Alignment.CENTRE); // 设置对齐方式
// 开始写入header
for (int i = 0; i < header.length; i++) {
// 用于写入文本内容到工作表中去
Label label = null;
// 列名字位置
// 在Label对象的构造中指明单元格位置(参数依次代表列数、行数、内容、样式)
label = new Label(i, 2, header[i], headerCell);
// 将定义好的单元格添加到工作表中
sheet.setColumnView(i, 18);// 设置宽度21
sheet.addCell(label);
}
// 设置数据样式(楷体_GB2312)
WritableFont valuefont = new WritableFont(WritableFont.createFont("宋体"), 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
WritableCellFormat valueCell = new WritableCellFormat(valuefont);
valueCell.setAlignment(Alignment.CENTRE); // 设置对齐方式
// 开始写入数据,sheetSize为每个SHEEET页总行数
// for (int i = kk * sheetSize; i < (kk + 1) * sheetSize; i++) {
for (int i = kk * sheetSize; i < dataList.size() - 1; i++) {
if (i < length) {
String[] dataArr = dataList.get(i);
for (int col = 0; col < dataArr.length; col++) {
// 获取数据
String colDate = "";
// 若=是最后一位,那么将返回""
String data = dataArr[col].substring(dataArr[col].indexOf("=") + 1, dataArr[col].length());
// null数据会以字符串的形式出现在dataArr中
if (!data.equals("null")) {
colDate = data;
// 获取贷款额度
if (col == dataArr.length - 5&& StringUtils.isNotBlank(data)) {
loanNum += Integer.valueOf(data);
}
}
// 定义格式
Label labelDate = null;
labelDate = new Label(col, i + 3 - (kk * sheetSize), colDate, valueCell);
sheet.addCell(labelDate);
}
} else {
break;
}
}
// 报表日期位置
// sheet.mergeCells(0, 1, header.length - 1, 1); // 为报表日期合并单元格
Label label = null;
String params = "日期:" + DateUtil.getDate();
params += "——总笔数:" + dataList.size();
params += "——";
params += "贷款总额:" + loanNum;
label = new Label(2, 1, params, headerCell);
sheet.addCell(label);
}
wwb.write();
// 关闭文件
wwb.close();
// 关闭输出流
os.close();
return "导出共" + dataList.size() + "条信息";
}
}