由一个 导出 扩展出来的一系列知识点

举报
拿我格子衫来 发表于 2022/03/17 23:40:44 2022/03/17
【摘要】 在使用node-xlsx 做导出的时遇到了几个问题 现记录一下 以备查阅 首先代码如下 // 导出所有联系人router.get('/exportContactsExcel', async function (req, res) { let data = [ { name: '第一个sheet', ...

在使用node-xlsx 做导出的时遇到了几个问题 现记录一下 以备查阅

首先代码如下


  
  1. // 导出所有联系人
  2. router.get('/exportContactsExcel', async function (req, res) {
  3. let data = [
  4. {
  5. name: '第一个sheet',
  6. data: [['字段1', '字段2', '字段3'], ['1', 'Michael', '99'], ['2', 'Tom', '98']]
  7. },
  8. {
  9. name: '第二个sheet',
  10. data: [['A1', 'B1'], ['A2', 'B2']]
  11. }
  12. ]
  13. // 将格式化的数据写如excel文件
  14. let buffer = xlsx.build(data)
  15. res.setHeader('Content-Type', 'application/vnd.openxmlformats') // 设置excel的文件拓展名 MIME 类型
  16. res.setHeader('Content-Disposition', 'attachment; filename=' + 'export.xlsx') // 下载的文件名为export.xlsx
  17. res.end(buffer) // 返回的是一个buffer
  18. })

 

首先是接口返回的是一个buffer的文件 

然后 Content-type 是application/vnd.openxmlformats 这值是excel的文件扩展名的MIME类型 关于office的文件还有很多content-type可以设置

复制一下给大家看看


  
  1. .doc application/msword
  2. .dot application/msword
  3. .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
  4. .dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template
  5. .docm application/vnd.ms-word.document.macroEnabled.12
  6. .dotm application/vnd.ms-word.template.macroEnabled.12
  7. .xls application/vnd.ms-excel
  8. .xlt application/vnd.ms-excel
  9. .xla application/vnd.ms-excel
  10. .xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  11. .xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template
  12. .xlsm application/vnd.ms-excel.sheet.macroEnabled.12
  13. .xltm application/vnd.ms-excel.template.macroEnabled.12
  14. .xlam application/vnd.ms-excel.addin.macroEnabled.12
  15. .xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12
  16. .ppt application/vnd.ms-powerpoint
  17. .pot application/vnd.ms-powerpoint
  18. .pps application/vnd.ms-powerpoint
  19. .ppa application/vnd.ms-powerpoint
  20. .pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
  21. .potx application/vnd.openxmlformats-officedocument.presentationml.template
  22. .ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow
  23. .ppam application/vnd.ms-powerpoint.addin.macroEnabled.12
  24. .pptm application/vnd.ms-powerpoint.presentation.macroEnabled.12
  25. .potm application/vnd.ms-powerpoint.template.macroEnabled.12
  26. .ppsm application/vnd.ms-powerpoint.slideshow.macroEnabled.12

 

只有设置正确的content-type 浏览器,或者http才会知道知道怎么处理这个buffer,

 

最后

res.setHeader('Content-Disposition', 'attachment; filename=' + 'export.xlsx') // 下载的文件名为export.xlsx
 

这行代码我也不甚理解,猜想大概和Http的原理有关吧,设置了这个 在浏览器直接访问接口就是下载一个excel 名为export.xlsx

还望路过的大佬指点迷津.

 

另外: 前端调用接口时  直接 这样

 window.open('/exportContactsExcel')
 

因为浏览器自动打开excel 所以直接就下载了

另外如果想直接在浏览器打开这个excel 就看这篇博客

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/90409455

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。