web-dev-qa-db-ja.com

NodejsでExcelファイルを作成する方法は?

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

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

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

64
geeky_monster

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');
67
mikemaccana

簡単な方法を考え出したところです。これは動作します-

タブを区切り文字としてファイルを作成するだけです(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を試しても動作しません。

40
geeky_monster

msexcel-builder を使用します。以下でインストールします:

npm install msexcel-builder

次に:

// Create a new workbook file in current working-path 
var workbook = excelbuilder.createWorkbook('./', 'sample.xlsx')

// Create a new worksheet with 10 columns and 12 rows 
var sheet1 = workbook.createSheet('sheet1', 10, 12);

// Fill some data 
sheet1.set(1, 1, 'I am title');
for (var i = 2; i < 5; i++)
  sheet1.set(i, 1, 'test'+i);

// Save it 
workbook.save(function(ok){
  if (!ok) 
    workbook.cancel();
  else
    console.log('congratulations, your workbook created');
});
20
Hesham Yassin

確認する必要がありますExcelJS

CSVおよびXLSX形式で動作します。

XLSXストリームの読み取り/書き込みに最適です。 XLSXダウンロードをExpress応答オブジェクトにストリーミングするために使用しました。基本的には次のとおりです。

app.get('/some/route', function(req, res) {
  res.writeHead(200, {
    'Content-Disposition': 'attachment; filename="file.xlsx"',
    'Transfer-Encoding': 'chunked',
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  })
  var workbook = new Excel.stream.xlsx.WorkbookWriter({ stream: res })
  var worksheet = workbook.addWorksheet('some-worksheet')
  worksheet.addRow(['foo', 'bar']).commit()
  worksheet.commit()
  workbook.commit()
}

大きなファイルに最適で、Excel4nodeよりも優れたパフォーマンスを発揮します(巨大なメモリ使用量を取得し、Nodeプロセスが「メモリ不足」クラッシュした後ストリーミング機能がはるかに制限されているため(20シートに400万個のセルを含むファイルの場合は約5分)(生成されるとすぐにチャンクを取得するための「commit()」データは許可されません)

this SO answer もご覧ください。

8
Frosty Z

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

ボーナス:スタイルなどを備えた非常に素晴らしいテンプレートを作成できます:

  1. 「お気に入りのスプレッドシートプログラム」でテンプレートを作成する
  2. ODSまたはXLSxとして保存します
  3. 内容を解凍します
  4. baseとして使用し、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>
7

または-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);
5
tmanolatos

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

ステップ1:JSONデータを変数に保存(ここではjsn変数)。

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

ステップ3:jsnのすべてのプロパティを文字列変数データに追加し、行の完了後にput '\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');
 });

Output

2
Nilesh Pawar

exceljsをインストール

npm i exceljs --save

exceljsをインポート

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); })

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

worksheet.eachRow(function(row, rowNumber) {
    console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});
row.eachCell(function(cell, colNumber) {
    console.log('Cell ' + colNumber + ' = ' + cell.value);
});
0
rajpoot rehan