質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

3597閲覧

Node.jsでbufferに保存されたExcelをコード上で扱いたい

kakoarisa

総合スコア9

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2020/08/06 10:58

編集2020/08/06 11:03

いつもお世話になっております。
タイトルがかなりややこしくなっておりますが、
下記のQiita記事を参考に、Excelファイルをダウンロードすることができましたが、
ダウンロードせずに、コード上でExcelファイルを扱うことができるかどうかの質問となります。
https://qiita.com/kjunichi/items/32d5410bab62c94db257

下記のようにsheetの中を、ダウンロードせずに確認したい形です。
var sheets = book.SheetNames;
console.log(sheets);

下記、記事内のコード引用となります。

Node.js

1var fs = require('fs'); 2var https = require('https'); 3options = { 4 host: 'www.google.co.jp', 5 port: 443, 6 path: '/', 7}; 8https.get(options, function(res) { 9 console.log('HEADERS: ' + JSON.stringify(res.headers)); 10 11 // HTTPヘッダを見てのとおり、sjisなので、utf8指定しても無駄 12 //res.setEncoding('utf8'); 13 14 // content-lengthがなくても大丈夫 15 var content = new Buffer([]); 16 17 res.on('data', function(chunk) { 18 content = Buffer.concat([content, chunk]); 19 }); 20 res.on('end', function() { 21 // エンコードは黙ってるとutf8にされるので、nullを明示的に指定する。 22 fs.writeFileSync("dump_sjis.txt", content, { 23 encoding: null 24 }); 25 }) 26});

コード上では.txtとなっておりますが、当環境は.xlsxでの保存となります。

fs.writeFileSync("dump_sjis.txt", content,

こちらのcontent(Buffer)をexcelとしてコード上で扱いたい形となります。
ダウンロードをしてからxlsx.readFileなどを使用することで結果的にコード上で扱えますが、それは容量の観点から避けたいためとなります。
ご享受お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

DocumentStreaming Read セクションにあるサンプルを試してみては?

__Explicitly concatenating streams (click to show)__より(読み込み)

javascript

1var fs = require('fs'); 2var XLSX = require('xlsx'); 3function process_RS(stream/*:ReadStream*/, cb/*:(wb:Workbook)=>void*/)/*:void*/{ 4 var buffers = []; 5 stream.on('data', function(data) { buffers.push(data); }); 6 stream.on('end', function() { 7 var buffer = Buffer.concat(buffers); 8 var workbook = XLSX.read(buffer, {type:"buffer"}); 9 10 /* DO SOMETHING WITH workbook IN THE CALLBACK */ 11 cb(workbook); 12 }); 13}

__Writing to filesystem first (click to show)__より(書き出し)

javascript

1var fs = require('fs'), tempfile = require('tempfile'); 2var XLSX = require('xlsx'); 3function process_RS(stream/*:ReadStream*/, cb/*:(wb:Workbook)=>void*/)/*:void*/{ 4 var fname = tempfile('.sheetjs'); 5 console.log(fname); 6 var ostream = fs.createWriteStream(fname); 7 stream.pipe(ostream); 8 ostream.on('finish', function() { 9 var workbook = XLSX.readFile(fname); 10 fs.unlinkSync(fname); 11 12 /* DO SOMETHING WITH workbook IN THE CALLBACK */ 13 cb(workbook); 14 }); 15}

投稿2020/08/06 23:28

AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kakoarisa

2020/08/07 08:42

ご回答ありがとうございます。 教えて頂きましたtypeを指定してのXLSX.readで解決致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問