如何将blob转换为xlsx或csv?

时间:2019-06-20 09:17:23

标签: javascript csv dataset blob xlsx

具有文件下载选项的应用程序前端(可以采用以下格式:xlsx,csv,dat)。 为此,我使用fileSaver.js

一切都适用于.dat/.csv格式,但对于.xlsx则无效,文件已损坏。

我测试了以下格式的转换:

  • utf8
  • base64
  • binary

这是我的工作方式:

// /* BACK */ //
// data is 
fs.readFile(filePath, (err, data) {...})

// the api give this answer the important part is "filename" & "data"
{"status":"ok","context":"writing the intermediate file","target":"/temp/","fileName":"name.xlsx","data":{"type":"Buffer","data":[72,82,65,67,67,69,83,83,32,10]}}
// /* FRONT */ //
let json = JSON.stringify(data)
let buffer = Buffer.from(JSON.parse(json).data)
let read = buffer.toString('utf8')
let blob = new Blob([read])
FileSaver.saveAs(blob, fileName)

3 个答案:

答案 0 :(得分:0)

@Hadock 如果要下载扩展名为.csv的文件,则需要传递

这样的文件类型
let blob = new Blob([csv], { type: 'application/vnd.ms-excel' });

代替

let blob = new Blob([read])

并且不要忘记发送扩展名为(test.csv)的文件名。

对于excel文件,我使用了其他插件 exceljs demo

答案 1 :(得分:0)

您无法将json数据直接保存到.xlsx文件,您可以使用“ sheetjs”(https://sheetjs.com/)之类的库将json数据转换为excel格式

var ws_name = filename;//"SheetJS";
var wb = new Workbook(), ws = sheet_from_array_of_arrays(data);
/* add worksheet to workbook */
wb.SheetNames.push(ws_name);
wb.Sheets[ws_name] = ws;
var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'binary' });
saveAs(new Blob([s2ab(wbout)], { type: "application/octet-stream" }), filename + ".xlsx")

答案 2 :(得分:0)

好吧,对于通过此主题的任何人,我的解决方案都是:

(请记住,为dl文件提供更好的解决方案:以api响应的形式发送带有标头“ Content-disposition”的文件或对该文件like this使用express)

背面(节点)的工作方式如下:

{"From  Subject Received    Size    Categories  
Shiza Khaliq    Re: Resume for Dot Net Developer    5/10/2019   49 KB       } 

这里:

  • target是文件名及其开头的路径。 扩展名( fs.readFile(filePath, (err, data) => { if (err) { console.log(`-------- oups error - read --------`) console.log(err) res.send({ status: `erreur`, context: `read the source file`, id: err.errno, code: err.code, message: err.message.replace(/\\/g, '/') }) } else { res.send({ status: `ok`, context: `send data file`, target: target, fileName: fileName, data: data }) } })
  • fileName是名称和扩展名(/path/name.ext
  • 数据是readFile(name.ext)发送的数据

前端(反应)的工作方式如下:

{"type":"Buffer","data":[72,82,65,67,67,69,83,83,32,10]}