0

だから私はExcelJSを使ってExcelファイルを作成しています。現在、ファイルをディスクに保存しています。ファイルに追加するデータは、API 呼び出しから取得されます。

let options = {
  filename: 'pathtofile',
  useStyles: true,
  useSharedStrings: true
}

let workbook = new Excel.stream.xlsx.WorkbookWriter(options)
let sheet = workbook.addWorksheet('myWorksheet')

// add some data to the file

sheet.commit()
workbook.commit()

Azure Blob Storage にアップロードするように変更したいと思います。ExcelJS では、コミット先の astreamではなくa を指定できますfilename。そこで、Memory Streams JSを使用することにしたので、オプションは次のようになります。

let stream = new streams.WritableStream()

let options = {
  stream: stream,
  useStyles: true,
  useSharedStrings: true
}

Azure のドキュメントを読むと、最も適切な 2 つの方法は と のようcreateBlockBlobFromStream()createWriteStreamToBlockBlob()あり、どちらも読み取り可能なストリームが必要なようです (間違っている場合は修正してください)。これは、ExcelJS を使用して書き込み可能なストリームを持っているが、Azure Blob Storage 用の読み取り可能なストリームが必要であるため、私が立ち往生している場所です。明らかに、ファイルをディスクに書き込むことができます。ファイルから読み取り可能なストリームを作成します。Azure Blob Storage にアップロードした後、最後にファイルを削除しますが、これは多くのオーバーヘッドです。私はこれについて本当に回りくどい方法で行っていますか?

4

1 に答える 1

0

Streaming XLSX Writerのセクションに説明があります:</p>

オプションでストリームもファイル名も指定されていない場合、ワークブック ライターは、XLSX ワークブックの内容をメモリに格納する StreamBuf オブジェクトを作成します。プロパティ workbook.stream を介してアクセスできるこの StreamBuf オブジェクトは、stream.read() によってバイトに直接アクセスするか、コンテンツを別のストリームにパイプするために使用できます。

filenameしたがって、 inを設定せずに、次のコード スニペットを試すことができますoptions

let blobSvc = azure.createBlobService();

let options = {
  useStyles: true,
  useSharedStrings: true
}

let workbook = new Excel.stream.xlsx.WorkbookWriter(options)
let sheet = workbook.addWorksheet('myWorksheet')
sheet.columns = [
    { header: 'Id', key: 'id', width: 10 },
    { header: 'Name', key: 'name', width: 32 },
    { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
];
sheet.commit()
workbook.commit()
workbook.stream.pipe(blobSvc.createWriteStreamToBlockBlob('mycontainer','test.xlsx',function(err,result){
    if(err)console.log(err)
    console.log(result);
}))
于 2017-04-04T02:43:10.747 に答える