Node.jsでCSVの読み込みや保存をする
Node.jsでCSVファイルを読み込んだり、保存したりする方法です。自前で文字列を操作しなくてもライブラリを使うことで自動でオブジェクトとの変換を行ってくれます。
また、Expressで直接ダウンロードさせるサンプルも載せています。
本記事のサンプル動作バージョン
- csv-parse - 5.3.0
- csv-stringify - 6.2.0
- iconv-lite - 0.6.3
CSVファイルを読み込む
csv-parseを使うことで、CSVをオブジェクトの配列や配列の配列に読み込みことができます。
csv-parseのインストール
Excelなどで作成したShift-JISのCSVファイルを開くためにはiconv-liteもインストールします。
UTF-8で保存したCSVファイルを読み取る - ヘッダー行なしの場合
結果は配列で取得できます。
実行結果
UTF-8で保存したCSVファイルを読み取る - ヘッダー行ありの場合
結果はオブジェクトの配列で取得できます。
実行結果
Shift-JISで保存したCSVファイルを読み取る
ファイルから読み込んだデータをiconv.decode()
でデコードします。
実行結果(UTF-8で表示)
オブジェクトの一覧をCSVファイルで保存する
オブジェクトからカンマ区切りへの変換はcsv-stringifyを使用します。あとは変換した文字列をwriteFileSync()
で保存すればOKです。
インストール
こちらもShift-JISで保存するためにはiconv-liteもインストールします。
ヘッダー出力なしで保存する
オプションのheader
にfalse
を指定します。
output.csv の内容
ヘッダー出力ありで保存する
オプションのheader
にtrue
を指定します。
output.csv の内容
出力する項目を指定する
オプションのcolumns
で出力する項目を指定できます。項目は入力データのプロパティ名で指定します。ヘッダー出力あり・ヘッダー出力なしの場合、どちらでも指定可能です。
配列指定
配列で入力データのプロパティ名を指定します。
output.csv の内容
オブジェクト指定
オブジェクトで入力データのプロパティ名を指定します。プロパティ名の値がカラム名として出力されます。
保存されたファイルの内容
値を""で囲んで保存する
オプションのquoted_string
にtrue
を指定します。
保存されたファイルの内容
Shift-JISで保存する
ExcelなどでCSVを開くケースも多いと思います。その場合Shift-JISで保存しておく必要があります。
Node.jsでは保存前にiconv.encode()
で文字列をエンコードすることでShift-JISで保存できます。
ExpressでCSVを直接ダウンロードさせる
Expressでサーバーのストレージに保存することなく、クライアントにCSVをダウンロードさせるサンプルです。
ブラウザでhttp://localhost:8080/download-csv
にアクセスすると、download.csvがダウンロードされます。
UTF-8で保存したい場合は、response
を次のように変更してください。
とても役立つ情報をありがとうございます!Node.jsでのCSV操作がこんなに簡単にできるとは知りませんでした。サンプルコードもわかりやすくて助かりました。今後のプロジェクトにぜひ活用させていただきます。