1

テンプレートの Excel ファイルがあり、読み取り可能なストリームを使用してファイルにデータを書き込み、結果ファイルをサーバーの応答にストリーミングしてダウンロードする必要があります。

これは、これまでのところ、exceljsを使用して得たものです。ただし、ワークブックが応答に送信される前にメモリに保存されたため、「実際の」ストリーミングではありません。

const path = require('path')
const Excel = require('exceljs')
const dao = require('./dao')

const stream = dao.getData().stream()
const workbook = new Excel.Workbook()

workbook.xlsx.readFile(path.join(__dirname, 'Template.xlsx'))
.then(() => {
  const detailSheet = workbook.getWorksheet('Detail')
  detailSheet.columns = colName.header.detail

  stream.on('data', (d) => {
    detailSheet.addRow(d).commit()
  })

  stream.on('end', () => {
    workbook.xlsx.write(res)
  })
})
4

1 に答える 1

0

私はあなたがexceljs(ExcelJS Package)を使用していると仮定しています。そうでない場合、これは適用されません。

ストリーミングを使用する場合は、ワークブックを別の方法で初期化します。ワークブックをコンストラクターで設定するのではなく、次のようにします。

const workbook = new Excel.stream.xlsx.WorkbookReader(options);

オプションは次のとおりです。

{
    filename: 'filename'
}

書き込み用のインターフェースはExcel.stream.xlsx.WorkbookWriter(options);

その後、他のすべては同じように行うことができます。パッケージには、いくつかの小さな違いがリストされています。

  • ワークシートがワークブックに追加されると、削除することはできません。
  • 行がコミットされると、ワークシートから削除されるため、アクセスできなくなります。
  • unMergeCells() はサポートされていません。

これらの制約内で作業できる限り、ストリーミング オプションが最もメモリ パフォーマンスの高いオプションになる可能性があります。

于 2018-03-13T03:14:52.260 に答える