前回、内閣府の提供する祝日一覧CSVデータ(国民の祝日について - 内閣府)を =IMPORTDATA("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv")
で読み込もうとしましたが文字化けしてしまって使い物になりませんでした。
今回はGASを用いることで文字化けを回避し、スプレッドシート上に祝日一覧データを自動取得できるようにしてみます。
いつもどおり細かいことはさておき実際のスプレッドシートを見たいという方はこちらのシートをコピーしてお試しください。
Shift_JISのCSVデータをインポートするGAS関数 - Google スプレッドシート
完成形は↓のようなイメージです。
コード
処理内容は以下の通り。
- URLを指定してCSVデータを取得
- 文字コードを指定(Default: Shift_JIS)してテキストデータを抽出
- GASの
Utilities.parseCsv
を用いてCSVを2次元配列に変換 - 出力する開始行番号を指定(Default: 1)して返す
/** * 指定されたURLのCSVファイルを、指定された文字コードで読み込み、二次元配列として返します。 * * @param {string} url CSVファイルのURL * @param {string} [encoding="Shift_JIS"] 文字コード (UTF-8, Shift_JIS) * @param {number} [headerRow=1] ヘッダー行番号 * @return {string[][]} CSVデータの二次元配列 */ function importCsv(url, encoding = "Shift_JIS", headerRow = 1) { // URLからコンテンツを取得 const response = UrlFetchApp.fetch(url); const content = response.getContentText(encoding); // CSVをパース const csvData = Utilities.parseCsv(content); // 指定された行数からデータを返す return csvData.slice(headerRow - 1); }
設定手順と使い方
① 上部メニューからGoogle Apps Scriptの画面を開く
② コード.gs に前述のコードを貼り付ける
③ スプレッドシートの任意の場所に関数を設定
=importCsv("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv")
これで日付と祝日の名称が文字化けせずに出力される!
おまけの機能 headerRow
キレイなCSVデータの場合は不要ですが、そうでない場合も多々あります。
例えば最初の1~5行目はサマリーデータ(◯月×日~△月□日のレポート みたいな文言とか)になっている場合、実際にスプレッドシートに読み込んでほしいのは6行目から下だけ...とか。
このとき、第3引数に 6
を指定することで6行目から下だけを抽出できるようにしています。
=importCsv("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv","Shift_JIS",6)