微信小程序导出excel
前端代码
createReport(){
this.checkedList=[];
for(let i=0;i<this.searchList.length;i++){
for(var j = 0; j < this.searchList[i].keyword.length; j++) {
var item = this.searchList[i].keyword[j];
this.$set(item,'deptName',this.searchList[i].name); //向数组中加入元素
this.$set(item,'type',this.searchList[i].type);
if(item.checked){
this.checkedList.push(item);
}
}
}
var that=this;
uni.showLoading({
title: "报表正在生成...",
mask: true
});
uni.request({
url: baseconfig.server+'/affairs/createReport',
method: 'POST',
dataType: 'json',
contentType : "application/json",
header:{
'content-type':'application/x-www-form-urlencoded'
},
data: {
checkedList:JSON.stringify(this.checkedList)
},
responseType: 'arraybuffer', //此处是请求文件流,必须带入的属性
success(res) {
if (res.statusCode === 200) {
console.log("200");
const fs = wx.getFileSystemManager(); //获取全局唯一的文件管理器
fs.writeFile({
filePath: wx.env.USER_DATA_PATH + "/统计报表.xls", // wx.env.USER_DATA_PATH 指定临时文件存入的路径,后面字符串自定义
data: res.data,
encoding: "binary", //二进制流文件必须是 binary
success(res) {
console.log("success(res)",res);
wx.openDocument({ // 打开文档
filePath: wx.env.USER_DATA_PATH + "/统计报表.xls", //拿上面存入的文件路径
showMenu: true, // 显示右上角菜单
success: function(res) {
console.log("successfun",res);
setTimeout(() => {
uni.hideLoading();//隐藏加载样式
}, 500);
},fail:function(res){
console.log("failfun",res);
}
})
},
fail(res){
console.log("fail",res);
}
})
}else{
console.log("不是200");
}
console.log("success",res);
},
fail(err) {
console.log('导出失败:', err);
}
})
},
后端代码
@RequestMapping(value = "/createReport") @ResponseBody public Object createReport(HttpServletRequest req, HttpServletResponse resp,@RequestParam(name="checkedList",required = false) String checkedList)throws IOException { JSONArray jsonArray= JSONArray.fromObject(checkedList); List<Map> list = JSONObject.parseArray(jsonArray.toString(), Map.class); String type=""; for (Map map : list) { type=map.get("type").toString(); String[] strArray = map.get("headlines").toString().split(":"); if(strArray.length>1){ String attributeName=strArray[0]; String attributeValue=strArray[1]; map.put("attributeName",attributeName); map.put("attributeValue",attributeValue); }else{ String attributeName=strArray[0]; //String attributeValue=strArray[1]; map.put("attributeName",attributeName); map.put("attributeValue",null); } } List<ReportExportModel> modelist=affairsService.buildReportModelByList(list); ExportParams exportParams=new ExportParams(type+"统计表","统计数据"); exportParams.setStyle(ReportStyle.class); Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ReportExportModel.class, modelist); String filedisplay = type+"统计表.xls"; ExportBuilder.buildheaderAndExport(req, resp, filedisplay,workbook); return success(); }
public List<ReportExportModel> buildReportModelByList(List<Map> list){
List<ReportExportModel> modellist=new ArrayList<>();
for(Map map:list) {
ReportExportModel model=new ReportExportModel();
model.setDeptName(map.get("deptName")!=null?map.get("deptName").toString():null);
model.setAttributeName(map.get("attributeName")!=null?map.get("attributeName").toString():null);
model.setAttributeValue(map.get("attributeValue")!=null?map.get("attributeValue").toString():null);
modellist.add(model);
}
return modellist;
}
public static void buildheaderAndExport(HttpServletRequest req, HttpServletResponse resp,String filename,Workbook workbook) throws IOException {
buildheader(req,resp,filename);
OutputStream out = resp.getOutputStream();
workbook.write(out);
out.close();
}
public static void buildheader(HttpServletRequest req, HttpServletResponse resp,String filename) throws UnsupportedEncodingException {
resp.reset();
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/x-download");
//filename = URLEncoder.encode(filename, "UTF-8");
//filename=new String(filename.getBytes("utf-8"), "ISO8859-1");
String headStr = "attachment; filename=\"" + new String(filename.getBytes("utf-8"), "ISO8859-1") + "\"";
resp.addHeader("Content-Disposition", headStr);
}
package com.kdgcsoft.zw.util; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Workbook; import cn.afterturn.easypoi.excel.export.styler.AbstractExcelExportStyler; import cn.afterturn.easypoi.excel.export.styler.IExcelExportStyler; public class ReportStyle extends AbstractExcelExportStyler implements IExcelExportStyler{ public ReportStyle(Workbook workbook) { super.createStyles(workbook); } @Override public CellStyle getHeaderStyle(short color) { CellStyle titleStyle = workbook.createCellStyle(); Font font = workbook.createFont(); font.setFontHeightInPoints((short) 12); font.setBold(true); titleStyle.setFont(font); titleStyle.setBorderLeft((short) 1); // 左边框 titleStyle.setBorderRight((short) 1); // 右边框 titleStyle.setBorderBottom((short) 1); titleStyle.setBorderTop((short) 1); titleStyle.setAlignment(CellStyle.ALIGN_CENTER); titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); return titleStyle; } @Override public CellStyle stringNoneStyle(Workbook workbook, boolean isWarp) { CellStyle style = workbook.createCellStyle(); style.setBorderLeft((short) 1); // 左边框 style.setBorderRight((short) 1); // 右边框 style.setBorderBottom((short) 1); style.setBorderTop((short) 1); style.setAlignment(CellStyle.ALIGN_CENTER); style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); style.setDataFormat(STRING_FORMAT); if (isWarp) { style.setWrapText(true); } return style; } @Override public CellStyle getTitleStyle(short color) { CellStyle titleStyle = workbook.createCellStyle(); Font font = workbook.createFont(); font.setBold(true); titleStyle.setFont(font); titleStyle.setBorderLeft((short) 1); // 左边框 titleStyle.setBorderRight((short) 1); // 右边框 titleStyle.setBorderBottom((short) 1); titleStyle.setBorderTop((short) 1); titleStyle.setAlignment(CellStyle.ALIGN_CENTER); titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); titleStyle.setWrapText(true); return titleStyle; } @Override public CellStyle stringSeptailStyle(Workbook workbook, boolean isWarp) { return isWarp ? stringNoneWrapStyle : stringNoneStyle; } }
package com.kdgcsoft.zw.applets.entity;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.handler.inter.IExcelModel;
import java.io.Serializable;
/*
* @Description: 配置excel模板
*/
@SuppressWarnings("serial")
public class ReportExportModel implements Serializable,IExcelModel{
@Excel(name="单位",needMerge=true,orderNum="0",width=20,mergeVertical=true) //mergeVertical设置是否纵向合并列
private String deptName;
@Excel(name="名称",needMerge=true,orderNum="1",width=20)
private String attributeName;
@Excel(name="数值",needMerge=true,orderNum="2",width=20)
private String attributeValue;
private Long rownum;
private String errorMsg;
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getAttributeName() {
return attributeName;
}
public void setAttributeName(String attributeName) {
this.attributeName = attributeName;
}
public String getAttributeValue() {
return attributeValue;
}
public void setAttributeValue(String attributeValue) {
this.attributeValue = attributeValue;
}
public Long getRownum() {
return rownum;
}
public void setRownum(Long rownum) {
this.rownum = rownum;
}
@Override
public String getErrorMsg() {
return errorMsg;
}
@Override
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
excel表格示例

posted on 2021-07-13 17:19 ALWAYS☆REMIND 阅读(2134) 评论(1) 收藏 举报
浙公网安备 33010602011771号