101

私は nodejs プログラマーです。これで、Excel ファイル形式で保存したいデータのテーブルができました。これを行うにはどうすればよいですか?

Node ライブラリがいくつか見つかりました。しかし、それらのほとんどは Excel ライターではなく Excel パーサーです。私は Linux サーバーを使用しています。したがって、 Linux で実行できるものが必要です。知っている便利なライブラリがあれば教えてください。

または、CSV ファイルを xls ファイルに (プログラムで) 変換する方法はありますか?

4

11 に答える 11

122

excel4nodeは、公式仕様に基づいて構築された、保守されたネイティブの Excel ファイル クリエーターです。これは、他の回答で言及されているmxexcel-builderと似ていますが、より維持されています。

// Require library
var excel = require('excel4node');

// Create a new instance of a Workbook class
var workbook = new excel.Workbook();

// Add Worksheets to the workbook
var worksheet = workbook.addWorksheet('Sheet 1');
var worksheet2 = workbook.addWorksheet('Sheet 2');

// Create a reusable style
var style = workbook.createStyle({
  font: {
    color: '#FF0800',
    size: 12
  },
  numberFormat: '$#,##0.00; ($#,##0.00); -'
});

// Set value of cell A1 to 100 as a number type styled with paramaters of style
worksheet.cell(1,1).number(100).style(style);

// Set value of cell B1 to 300 as a number type styled with paramaters of style
worksheet.cell(1,2).number(200).style(style);

// Set value of cell C1 to a formula styled with paramaters of style
worksheet.cell(1,3).formula('A1 + B1').style(style);

// Set value of cell A2 to 'string' styled with paramaters of style
worksheet.cell(2,1).string('string').style(style);

// Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
worksheet.cell(3,1).bool(true).style(style).style({font: {size: 14}});

workbook.write('Excel.xlsx');
于 2017-03-10T15:08:54.410 に答える
57

簡単な方法を思いつきました。これは機能します-

タブを区切り文字として使用してファイルを作成するだけです (CSV に似ていますが、コンマを Tab に置き換えます)。拡張子 .XLS を付けて保存します。ファイルは Excel で開くことができます。

役立つコード -

var fs = require('fs');
var writeStream = fs.createWriteStream("file.xls");

var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
var row1 = "0"+"\t"+" 21"+"\t"+"Rob"+"\n";
var row2 = "1"+"\t"+" 22"+"\t"+"bob"+"\n";

writeStream.write(header);
writeStream.write(row1);
writeStream.write(row2);

writeStream.close();

これにより、ファイルが XLS ファイル形式で作成されます。XLS の代わりに XLSX を試してもうまくいきません。

于 2013-07-03T14:37:04.173 に答える
8

新しい Office の XLSx は、XML およびその他のファイルの圧縮されたコレクションです。したがって、それを生成して、それに応じて圧縮できます。

おまけ: スタイルなどを使ってとても素敵なテンプレートを作成できます:

  1. 「お気に入りのスプレッドシート プログラム」でテンプレートを作成する
  2. ODS または XLSx として保存します。
  3. 中身を解凍
  4. それをベースとして使用し、データを入力content.xml(またはxl/worksheets/sheet1.xml) します。
  5. 提供する前にすべて圧縮してください

ただし、ODS(openoffice)の方がはるかに親しみやすいことがわかりました(Excelはまだ開くことができます)。これが私が見つけたものですcontent.xml

<table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here be a1</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here is b1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="16382"/>
</table:table-row>
于 2014-04-22T12:00:36.317 に答える
8

fsパッケージを使用して、JSON データから Excel/CSV ファイルを作成できます。

ステップ 1: JSON データを変数に格納します (ここではjsn変数にあります)。

ステップ 2:空の文字列変数を作成します (ここではdataです)。

ステップ 3: jsnのすべてのプロパティを文字列変数データに追加'\t' し、行の完了後に 2 つのセルと '\n' の間に配置を追加します。

コード:

var fs = require('fs');

var jsn = [{
    "name": "Nilesh",
    "school": "RDTC",
    "marks": "77"
   },{
    "name": "Sagar",
    "school": "RC",
    "marks": "99.99"
   },{
    "name": "Prashant",
    "school": "Solapur",
    "marks": "100"
 }];

var data='';
for (var i = 0; i < jsn.length; i++) {
    data=data+jsn[i].name+'\t'+jsn[i].school+'\t'+jsn[i].marks+'\n';
 }
fs.appendFile('Filename.xls', data, (err) => {
    if (err) throw err;
    console.log('File created');
 });

出力

于 2017-11-02T10:31:53.677 に答える
4

または-Expressを使用して@Jamaica Geekの回答に基づいて構築-ファイルの保存と読み取りを回避するには:

  res.attachment('file.xls');

  var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
  var row1 = [0,21,'BOB'].join('\t')
  var row2 = [0,22,'bob'].join('\t');

  var c = header + row1 + row2;
  return res.send(c);
于 2016-07-19T12:16:55.840 に答える
4

エクセルjsをインストール

npm i exceljs --save

エクセルをインポート

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

ワークブックを作成

var options = {
                filename: __dirname+'/Reports/'+reportName,
                useStyles: true,
                useSharedStrings: true
            };

            var workbook = new Excel.stream.xlsx.WorkbookWriter(options);

ワークシート作成後

var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});

worksheet.column配列では、列名をヘッダーに渡し、配列キーをキーに渡します

worksheet.columns = [
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 20},

            ];

forEachループを使用した後、exelファイルに行を1つずつ追加します

array.forEach(function(row){ worksheet.addRow(row); })

各エクセル行とセルでループを実行することもできます

worksheet.eachRow(function(row, rowNumber) {
    console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});
row.eachCell(function(cell, colNumber) {
    console.log('Cell ' + colNumber + ' = ' + cell.value);
});
于 2019-04-10T05:12:33.097 に答える