Angularjs1.6对接后台导出Excel的接口,
代码:
$http({
url: 'http://localhost:8083/console/devices/poi',
method: "POST",
data: {
"email": "官方邮箱"
},
headers: {
'Content-type': 'application/json'
},
responseType: 'arraybuffer'
}).then(function(data, status, headers, config) {
var blob = new Blob([data], { type: "application/vnd.ms-excel" });
var objectUrl = URL.createObjectURL(blob);
var a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('style', 'display:none');
a.setAttribute('href', objectUrl);
var filename = "记录.xls";
a.setAttribute('download', filename);
a.click();
URL.revokeObjectURL(objectUrl);
})
下载下来的Excel中显示如下
不知道是什么情况
这是从后台拿的代码
public RetBody poi(HttpServletResponse response, Map fieldMap)throws IOException {
List<UDevice> uDevices=uDeviceMapper.selectAll();
// String[] headers = {"ID", "年龄", "密码", "邮箱"};//导出的Excel头部,这个要根据自己项目改一下
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet();
// 设置表格默认列宽度为15个字节
sheet.setDefaultColumnWidth((short) 18);
HSSFRow row = sheet.createRow(0);
// for (short i = 0; i < headers.length; i++) {
// HSSFCell cell = row.createCell(i);
// HSSFRichTextString text = new HSSFRichTextString(headers[i]);
// cell.setCellValue(text);
// }
int i = 0;
for(Object key:fieldMap.keySet()){
HSSFCell cell = row.createCell(i++);
HSSFRichTextString text = new HSSFRichTextString(fieldMap.get(key).toString());
cell.setCellValue(text);
}
//遍历集合数据,产生数据行
Iterator<UDevice> user = uDevices.iterator();
int index = 0;
while (user.hasNext()) {
index++;
row = sheet.createRow(index);
UDevice t = (UDevice) user.next();
//利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
i = 0;
for (Field field : fields) {
if(fieldMap.get(field.getName()) == null){
continue;
}
HSSFCell cell = row.createCell(i);
String fieldName = field.getName();
String getMethodName = "get"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
try {
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,
new Class[]{});
Object value = getMethod.invoke(t, new Object[]{});
String textValue = null;
if (value instanceof Date) {
Date date = (Date) value;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
textValue = sdf.format(date);
} else {
if (!(StringUtils.isEmpty(value))){
textValue = value.toString();
}else {
textValue = "null";
}
}
HSSFRichTextString richString = new HSSFRichTextString(textValue);
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);//定义Excel数据颜色
richString.applyFont(font3);
cell.setCellValue(richString);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
}
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment;filename=createList.xls");//默认Excel名称
response.flushBuffer();
workbook.write(response.getOutputStream());
return new RetBody(RetEnum.REQ_SUCCESS);
}
你去后台请求Excel不就是下载吗?你直接访问你后台的接口下载就行了呀,js中也不用做其它处理