exceljs以csv格式正确写入文件,但文件以xlsx格式损坏

时间:2018-07-31 17:37:13

标签: node.js express xlsx exceljs

这是我使用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

2 个答案:

答案 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')
                }
            })