ホームページ >ウェブフロントエンド >jsチュートリアル >Excelファイルをダウンロードする機能をNodeJsに実装するにはどうすればよいですか?

Excelファイルをダウンロードする機能をNodeJsに実装するにはどうすればよいですか?

青灯夜游
青灯夜游転載
2020-09-10 10:48:333411ブラウズ

NodeJsExcel ファイルをダウンロードする機能を実装するにはどうすればよいですか?次の記事で紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Excelファイルをダウンロードする機能をNodeJsに実装するにはどうすればよいですか?

[ビデオチュートリアルの推奨: node js チュートリアル]

新しい言語であるため、nodejs のレポート機能はあまり完全ではありません。 。

(1).js-xlsx: 現在、Excel を処理するための Github 上で最も多くのスターを獲得しているライブラリです。複数の形式のテーブル XLSX / XLSM / XLSB / XLS / CSV の解析をサポートしています。解析は次のように実装されています。純粋な js と記述 Excel の生成と書き込みには、nodejs または FileSaver .js を使用する必要があります。サブテーブル Excel を生成できます。これは強力ですが、始めるのが少し難しいです。 Excel テーブル API サンプルのセル幅の基本的な設定は提供されておらず、ドキュメントは少し乱雑で、すぐに始めるのには適していません;

https://github.com/SheetJS/js-xlsx

(2).node-xlsx: Excel ファイル データを解析し、Node.js に基づいて Excel ファイルを生成し、xlsx 形式のファイルのみをサポートします;

https://github.com/mgcrea/node-xlsx

(3 ).excel-parser: Node.js に基づいて Excel ファイル データを解析し、xls および xlsx 形式のファイルをサポートしますが、Python に依存する必要がありますが、重すぎて実用的ではありません;

https://github.com/leftshifters/excel-parser

(4).excel-export: Node.js に基づいてデータを生成し、Excel ファイルにエクスポートします。生成されるファイル形式は xlsx です。セルの幅 API は使いやすい ワークシートの単語を生成できない 比較的シンプルですが、基本的な機能は基本的に満たせます;

https://github.com/functionscope/Node-Excel -Export

(5).node-xlrd: Excel ファイルからの node.js に基づいています データの抽出は、xls 形式のファイルのみをサポートします。xlsx はサポートしません。少し時代遅れで、一般的に使用される形式は XLSX です。

nodejs が最初に登場した数年間、開発者は多くのノード依存関係ライブラリを作成しましたが、そのほとんどは現在メンテナンスされていません。

node-xlsx と Excel-export だけがまだ継続的に更新されています。js-xlsx は大規模で包括的な基本ライブラリです (ただし、現在は利用できません。このライブラリの最大の問題は、API が非常に不親切、学習曲線が高い) 有能なプロジェクト チームは、さらにカプセル化できます。

この記事は、簡単にダウンロードできるデモです。excel-export を使用するだけです。

var express = require('express');var router = express.Router();var server =  express();

server.use('/api', router); 
var nodeExcel = require('excel-export');
 
const disableLayout ={layout: false};

 router.get('/test', function(req, res, next) {
     res.json({
         code:200
     })
 }) 
// disable interface layout.hbs  user config layout: falserouter.get('/exportExcel/:id', function(req, res, next) {    var conf ={};
    conf.stylesXmlFile = "styles.xml";
    conf.name = "mysheet";
    conf.cols = [{
        caption:'string',
        type:'string',
        beforeCellWrite:function(row, cellData){            return cellData.toUpperCase();
        },
        width:300
    },{
        caption:'date',
        type:'date',
        beforeCellWrite:function(){            var originDate = new Date(Date.UTC(1899,11,30));            return function(row, cellData, eOpt){
                console.log((cellData - originDate));                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', '2013-12-5', 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=" + encodeURIComponent("导出列表")+".xlsx");
    res.end(result, 'binary');
});
 
router.get('/exportmultisheetExcel/:id', function(req, res, next) {    var confs = [];    var conf = {};
    conf.cols = [{
        caption: 'string',
        type: 'string'
    },
        {
            caption: 'date',
            type: 'date'
        },
        {
            caption: 'bool',
            type: 'bool'
        },
        {
            caption: 'number 2',
            type: 'number'
        }];
    conf.rows = [['hahai', (new Date(Date.UTC(2013, 4, 1))).oaDate(), true, 3.14], ["e", (new Date(2012, 4, 1)).oaDate(), false, 2.7182], ["M&M<>'", (new Date(Date.UTC(2013, 6, 9))).oaDate(), false, 1.2], ["null", null, null, null]];    for (var i = 0; i < 3; i++) {
        conf = JSON.parse(JSON.stringify(conf));   //clone
        conf.name = 'sheet'+i;
        confs.push(conf);
    }    var result = nodeExcel.execute(confs);
    res.setHeader('Content-Type', 'application/vnd.openxmlformats');
    res.setHeader("Content-Disposition", "attachment; filename=" + "Report.xlsx");
    res.end(result, 'binary');
});var server=server.listen(8080,function(){
    console.log('8080')
})

3.excel-export では、数値、時間、true と false 、デフォルトの文字列の 4 種類のデータ形式が提供されます。

cols は列タイプのキャプションを列名に設定できます (最初の行の内容が埋められます)、type は列のデータ型、beforeCellWrite は埋め込む前にデータに対して論理処理を実行でき、幅はワイドバンド

行を 2 桁の配列として定義でき、Excel の内容を行と列に直接入力できます

name はシートの名前を定義します

注目に値します。 Excel-export を定義する必要がある場合 Excel のデフォルト形式は Excel 形式ヘッダーを参照する必要があります。このヘッダーは style.xml で定義されています。このファイルは、node_modules/example/styles.xml のプロジェクトの対応するディレクトリにコピーできます。

この例ではルート ディレクトリを使用しているため、ファイルをルート ディレクトリに配置する必要があります。そうしないと、ファイルが見つからないことが報告されます。

実際の開発では、Excel ファイルを中国語でエクスポートする必要がある場合があります。このとき、ヘッダーを設定し、中国語の言語をフォーマットする必要があります。

res.setHeader('Content-Type ', ' application/vnd.openxmlformats;charset=utf-8');
res.setHeader("Content-Disposition", "attachment; filename=" encodeURIComponent("Export List") ".xlsx");

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がExcelファイルをダウンロードする機能をNodeJsに実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。