Méthode d'exportation js :
$scope.showYes = function () {
var needFields = getTheNeedFields();
$http.post("/aa.do?fields="+needFields, {responseType: 'arraybuffer'}).then(function (response) {
var data = new Blob([response.data], {type: response.headers('Content-Type')});
var filename = response.headers('Content-Disposition').split(';')[1].trim().substr('filename='.length);
FileSaver.saveAs(data, filename);
});
};
Méthode de traitement côté serveur :
@RequestMapping("/aa")
public void testExportDynamic(HttpServletResponse response) throws IOException {
String fileName = System.currentTimeMillis()+"";
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8")+ ".xlsx");
OutputStream os = response.getOutputStream();
Map map = new HashMap();
String fields = request.getParameter("fields");
map.put("fields", fields);
//Map对象,带null的对象
List<HashMap> result = userDao.loadDatasBySelectionFields(map);
XSSFWorkbook workbook = MehtodApis.exportExcelFile(result, fields);
// OutputStream os = new FileOutputStream("D:/export2007_" + System.currentTimeMillis() + ".xlsx");
//
workbook.write(os);
os.close();
}
Mais le fichier téléchargé ressemble à ceci :
Console :
Si j'utilise ce type de sortie Excel pour trouver le chemin, le fichier ira bien.
Map map = new HashMap();
String fields = request.getParameter("fields");
map.put("fields", fields);
//Map对象,带null的对象
List<HashMap> result = userDao.loadDatasBySelectionFields(map);
XSSFWorkbook workbook = MehtodApis.exportExcelFile(result, fields);
OutputStream os = new FileOutputStream("D:/export2007_" + System.currentTimeMillis() + ".xlsx");
workbook.write(os);
os.close();
Et le problème de Shenma ? Comment y faire face ?
Faites une trace du point d'arrêt et vérifiez l'instantané de la mémoire pour voir s'il y a un problème avec vos données et si elles sont cohérentes avec la version d'Excel que vous avez ouverte