web端请求
var xhr = new XMLHttpRequest();
//post方式请求后台的路径
xhr.open('post', '/api-consultform/export/exportTimeall'), true);
//导出的Excel是二进制数据类型,所以设置为blob
xhr.responseType = 'blob';
//请求头(key,value),请求头可以设置多个key-value对
xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
//返回成功,导出的Excel文件
xhr.onload = function () {
if (this.status == 200) {
var blob = this.response;
var a = document.createElement('a');
// var a = $("#pldtime");
var url = window.URL.createObjectURL(blob);
a.href = url;
//设置文件名称
a.download = '工单.xls';
a.click();
}
}
//请求的参数,json格式,后台要用json格式接收
xhr.send(JSON.stringify(obj));
//发送的数据为obj
后台
@RequestMapping("/exportTimeall")
public void exportTimeall(@RequestBody JSONObject jsonObj,HttpServletRequest request,HttpServletResponse response) throws Exception{
SeriseInfo seriseInfo = JSONObject.toJavaObject(jsonObj, SeriseInfo.class);
//查出需要导出的List数据
List<List<String>> list = getTimerShaftViewsnew(seriseInfo,selectvalues);
//根据自己的方法生成字节流
ByteArrayOutputStream baos = SimpleExcelTool.TimerShaftwriteExcel1(list);
response.setContentType("application/xls");
response.setHeader("X-Frame-Options", "SAMEORIGIN");
//其实这个filename随便写个名字都行,最后生成的文件是根据前端设置的名字来展示的
response.setHeader("Content-disposition","attachment; filename=\""+ java.net.URLEncoder.encode("批量excel", "UTF-8") +".xls\"");
response.setContentLength(baos.size());
ServletOutputStream outputStream = response.getOutputStream();
baos.writeTo(outputStream);
outputStream.flush();
outputStream.close();
}
公用方法,用的基本是jxl的jar包
public static ByteArrayOutputStream TimerShaftwriteExcel1(List<List<String>> data) throws Exception {
WritableWorkbook workbook = null;
ByteArrayOutputStream os = new ByteArrayOutputStream();
workbook = Workbook.createWorkbook(os);
WritableSheet sheet = workbook.createSheet("Sheet0", 0);
WritableCellFormat cf = new WritableCellFormat();
cf.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
cf.setWrap(true);//设置自动换行
CellView cellView = new CellView();
cellView.setAutosize(true); //设置列自动大小
WritableCellFormat cfTitle = new WritableCellFormat();
cfTitle.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
cfTitle.setBackground(jxl.format.Colour.BRIGHT_GREEN);
cfTitle.setAlignment(jxl.format.Alignment.CENTRE);
for (int r = 0; r < data.size(); r++) {
for (int c = 0; c < data.get(r).size(); c++) {
Label label = new Label(c, r, data.get(r).get(c));
if (r == 0) {
label.setCellFormat(cfTitle);
} else {
sheet.setColumnView(r, cellView);
label.setCellFormat(cf);
}
sheet.addCell(label);
}
}
workbook.write();
workbook.close();
return os;
}
private List<List<String>> getTimerShaftViewsnew(SeriseInfo seriseInfo,String selectvalues) {
List<List<String>> temp = new ArrayList<List<String>>();
//ecxel第一行
List<String> list1 = new ArrayList<String>();
list1.add("x1");
list1.add("x2");
list1.add("x3");
temp .add(list1);
for (JSONObject m : xxxlist) {
List<String> list2 = new ArrayList<String>();
list2.add(m.getString("x1"));
list2.add(m.getString("x2"));
list2.add(m.getString("x3"));
temp .add(list2);
}
return temp;
}