自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/VBA/GAS/JavaScript/Raspberry Piなどで色んなことを自動化

日本の祝日CSVをスプレッドシートに自動読み込みするGAS関数(文字化け回避)Webスクレイピング超入門②

前回、内閣府の提供する祝日一覧CSVデータ(国民の祝日について - 内閣府)を =IMPORTDATA("https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv") で読み込もうとしましたが文字化けしてしまって使い物になりませんでした。

codelife.cafe

今回はGASを用いることで文字化けを回避し、スプレッドシート上に祝日一覧データを自動取得できるようにしてみます。

いつもどおり細かいことはさておき実際のスプレッドシートを見たいという方はこちらのシートをコピーしてお試しください。

Shift_JISのCSVデータをインポートするGAS関数 - Google スプレッドシート

完成形は↓のようなイメージです。

オリジナルの関数 importCsv

コード

処理内容は以下の通り。

  1. URLを指定してCSVデータを取得
  2. 文字コードを指定(Default: Shift_JIS)してテキストデータを抽出
  3. GASの Utilities.parseCsv を用いてCSVを2次元配列に変換
  4. 出力する開始行番号を指定(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の画面を開く

上部メニューからGoogle Apps Scriptの画面を開く

② コード.gs に前述のコードを貼り付ける

コード.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)