首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HTTP获取生成Excel工作簿,使用Express响应,然后自动下载文件?

HTTP获取生成Excel工作簿,使用Express响应,然后自动下载文件?
EN

Stack Overflow用户
提问于 2017-03-30 06:31:41
回答 1查看 8.4K关注 0票数 4

我正在构建我的第一个自定义NodeJS服务器,我想要一些关于如何实现以下过程的指导和建议:

  1. 客户端使用一些查询参数向服务器发送HTTP请求
  2. 基于查询参数的查询MongoDB (使用Mongoose)
  3. 从生成的MongoDB数据生成Excel工作簿。
  4. 该文件作为HTTP响应发送到客户端(使用Express)
  5. 收到响应后,客户端浏览器自动开始下载Excel工作簿文件。

我特别迷上了第3-5部分。我不确定应该使用哪些工具在服务器上使用Node生成Excel工作簿,哪种方式最好将Excel文件作为HTTP响应发送,或者如何让客户端浏览器开始下载接收到的文件。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-30 06:42:34

请查看:https://www.npmjs.com/package/excel-export

在这个模块介绍页面中,有一个很好的例子说明了如何:

  • 使用excel-export生成excel文件内容。
  • 通过Express将excel文件内容发送到浏览器。
  • 使浏览器通过Content-Disposition自动下载excel文件

下面是页面上的示例代码:

代码语言:javascript
运行
复制
var express = require('express');
var nodeExcel = require('excel-export');
var app = express();

app.get('/Excel', function(req, res){
    var conf ={};
    conf.stylesXmlFile = "styles.xml";
    conf.name = "mysheet";
    conf.cols = [{
        caption:'string',
        type:'string',
        beforeCellWrite:function(row, cellData){
             return cellData.toUpperCase();
        },
        width:28.7109375
    },{
        caption:'date',
        type:'date',
        beforeCellWrite:function(){
            var originDate = new Date(Date.UTC(1899,11,30));
            return function(row, cellData, eOpt){
                if (eOpt.rowNum%2){
                    eOpt.styleIndex = 1;
                }  
                else{
                    eOpt.styleIndex = 2;
                }
                if (cellData === null){
                  eOpt.cellType = 'string';
                  return 'N/A';
                } else
                  return (cellData - originDate) / (24 * 60 * 60 * 1000);
            } 
        }()
    },{
        caption:'bool',
        type:'bool'
    },{
        caption:'number',
        type:'number'               
    }];
    conf.rows = [
        ['pi', new Date(Date.UTC(2013, 4, 1)), true, 3.14],
        ["e", new Date(2012, 4, 1), false, 2.7182],
        ["M&M<>'", new Date(Date.UTC(2013, 6, 9)), false, 1.61803],
        ["null date", null, true, 1.414]  
    ];
    var result = nodeExcel.execute(conf);
    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
    res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
    res.end(result, 'binary');
});

app.listen(3000);
console.log('Listening on port 3000');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43110191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档