2017-02-28 5 views
0

私はexceljsを使用して(そのストリーミング機能を使用して)E​​xcelファイルを生成しています。ファイルをサーバーに保存してから読み込んで返す代わりに、hapijsのレスポンスにexceljsストリームを直接ストリームしたいと思います。hapijsで返信するためにexceljsストリームをパイプする方法

function(request, reply) { 
    const options = { 
    stream: reply, // I need to somehow declare the reply stream here 
    useStyles: false, 
    useSharedStrings: true 
    }; 

    const workbook = new Excel.stream.xlsx.WorkbookWriter(options); 
    workbook.addWorksheet('Test'); 
    const worksheet = workbook.getWorksheet('Test'); 

    worksheet.columns = [{ 
    header: 'product', key: 'product' 
    }]; 

    worksheet.addRow({product: 'MyProduct'}).commit(); 
    worksheet.commit(); 
    workbook.commit(); 

これは可能ですか? expressjsで行うようにExceljsストリームのオプションに直接返信することはできません。何かご意見は?

+0

返信は、ストリームを返すことができますが、私はあなたがHAPIの返信インタフェースに渡すことができる独自のストリーミングインターフェイスでexceljsロジックを包むだろう、私は**モジュールを使用し、[J](https://www.npmjs.com/package/j)**これを達成するために。 [this](https://github.com/circabs/xl-json)のモジュールを見て、ストリームをラップする方法を示してください。私の例では、excelからjsonに変換しています –

答えて

1
var wb = new Excel.stream.xlsx.WorkbookWriter(); 
var sh = wb.addWorksheet('sheet1'); 
sh.columns = [ 
    { header: 'Name', key: 'name' }, 
    { header: 'Age', key: 'age' } 
]; 

sh.addRow(['Ben', 8]); 
sh.addRow(['Dave', 10]); 

sh.commit(); 
wb.commit() 
.then(function() { 
    var stream = wb.stream; 
    var b = stream.read(); 

    reply(b) 
    .type('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') 
    .header('Content-Disposition', 'attachment; filename=file.xlsx') 
    .header('Content-Length', stream.length); 
}); 
+0

コードのみと "try this"落胆した。なぜこれがオペアンプの問題を解決するのか説明してください。 – user5226582

+0

exceljsライブラリサイトのStreaming XLSXセクションを読むことができます。使用方法については、 –

+0

の説明があります。あなたはまだあなたの答えの長期的な価値を向上させるために余分な情報を含めることができます。 "ターゲットサイトが到達不能であるか、または永続的にオフラインになる場合に備えて、常に重要なリンクの最も関連する部分を引用します" - http://stackoverflow.com/help/how-to-answer – user5226582

関連する問題