这是我使用exceljs编写和下载excel文件的代码。
const excel = require('exceljs')
const tempfile = require('tempfile')
var workbook = new excel.Workbook()
var sheet1 = workbook.addWorksheet('sample')
sheet1.columns = req.keys // Some data
var tempFilePath = tempfile('.csv')
workbook.csv.writeFile(tempFilePath).then(function() {
res.download(tempFilePath, 'sample.csv', function(err) {
if (err) {
res.status(500).json({
"success": false,
"error": err
})
return
}
})
})
当我将csv替换为xlsx时,它会写入但文件已损坏。
const excel = require('exceljs')
const tempfile = require('tempfile')
var workbook = new excel.Workbook()
var sheet1 = workbook.addWorksheet('sample')
sheet1.columns = req.keys // Some data
var tempFilePath = tempfile('.xlsx')
workbook.xlsx.writeFile(tempFilePath).then(function() {
res.download(tempFilePath, 'sample.xlsx', function(err) {
if (err) {
res.status(500).json({
"success": false,
"error": err
})
return
}
})
})
在此附有它的快照。
csv file | Unreadable image | Corrupted image | Postman response
答案 0 :(得分:0)
尝试添加Content-Type
标头:
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
CSV文件的格式为原始文本,因此无需担心MIME类型即可轻松阅读。 xlsx格式更复杂。如果您未设置内容类型,则浏览器将不知道如何处理文件
答案 1 :(得分:0)
我解决了这个问题。希望这对您有所帮助。 如果从服务器端下载此excel文件(在我的情况下为Node JS)。 该问题通过客户端上的一行解决: req.responseType =“ arraybuffer”;
requestData(req, "exportToExcel")
.then(resXHR => {
// For the correct processing of data from the server, you must specify the format/structure of data transfer
resXHR.responseType = "arraybuffer"
// Wait until the data is downloaded from the server
resXHR.onload = function () {
// Call a modal window for saving with type and file name
saveAs(new Blob([resXHR.response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), 'users.xlsx')
}
})