A GET API (google sheets API) returns an excel sheet in windows 1252 编码格式.如何使用 nodeJS 下载 sheet 作为 excel?

A GET API (google sheets API) returns an excel sheet in windows 1252 encoding format. How can I download the sheet as excel using nodeJS?

这是API给出的回复

这是代码片段。

axios.get(api , { headers: {"Authorization" : `Bearer ${token}` , "Content-Type":"application/json" , "Accept" : "*/*", "Accept-Encoding" : "gzip, deflate, br"} })
  .then(res => {
  try {     
  let fileString = iconv.decode(res.data, 'win1252');
  fs.writeFile('NodeReport.xlsx' , fileString , (error) => {
    console.log(error);
  });

  }
  catch (err){
    console.log(err);
  }
  }

);

因此,如果我在浏览器中点击 API,它会下载 excel 文件,如果我将 Postman 的响应保存为文件,它也会下载 excel 文件。但是我想从我的 nodeJS 代码中点击 API 然后将文件保存为 Excel file 。我试过使用 fs.writeFile 但它没有打开保存的文件,它说格式错误或内容已损坏。谁能告诉我如何从 API 响应中保存此文件?

在你的脚本中,作为修改,下面的修改怎么样?

修改后的脚本:

axios
  .get(api, {
    headers: { Authorization: `Bearer ${token}` },
    responseType: "arraybuffer",
  })
  .then((res) => {
    try {
      fs.writeFile("NodeReport.xlsx", res.data, (error) => {
        console.log(error);
      });
    } catch (err) {
      console.log(err);
    }
  });
  • 在这个修改中,数据被检索为数组缓冲区并将数据保存为XLSX文件。

  • 如果导出文件损坏,请将fs.writeFile("NodeReport.xlsx", res.data, (error) => {修改为fs.writeFile("NodeReport.xlsx", new Buffer.from(res.data), (error) => {再测试

参考: