2022/02/12に更新

【GASで時短】CSVファイルを直接シートに読み込む

スプレッドシート

インターネット上にあるCSVファイルをシートに直接取り込むGoogle Apps Scriptです。オープンデータ等の取り込みが楽になるかもしれません。

こんな悩みを解決します


  • インターネット上のCSVファイルをスプレッドシートで集計したいが、一度ダウンロードしたりアップロードするのが煩わしい。

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • インターネット上のCSVファイルを直接スプレッドシートに読み込むことが出来ます。

使い方


1.スクリプトの実行

上部のメニューから「インターネット上のCSVファイルを読み込む」を実行します。

2.URLの指定

インターネット上のCSVファイルのURLを入力します。今回は例として東京都の「新型コロナウイルス感染症検査陽性者の状況」をお借りしました。

3.結果の確認

シートにCSVの中身が展開されます。
スクリプトを実行したときに開いているシートに書き込まれます。上書きされると困るデータがある場合は新しいシートを開いてからスクリプトを実行してください。

4.エラーメッセージ

入力されたURLが不正と判断されると、「正しいURLを入力してください」というエラーメッセージが表示されてスクリプトが終了します。

5.注意点

以下のCSVファイルはうまく読み込めないと思われます。
1つ目についてはgetContentText('Shift_JIS')にすることで回避できます。
2つ目はparseCsv()が対応していないようです。CSVパーサーを自分で実装しないとダメそうです。

  • UTF-8以外の文字コードが使われている(Shift-JIS等)
  • CSVの1カラム内に、改行が含まれている

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00043/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('インターネット上のCSVファイルを読み込む', 'loading_csv_from_internet');

  // メニューを画面に追加する
  menu.addToUi();
}

function loading_csv_from_internet() {

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // アクティブなスプレッドシート、シートを取得
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 取得するCSVのURLを入力させる
  let input = ui.prompt('CSVファイルのURLを入力してください', ui.ButtonSet.OK_CANCEL);

  // キャンセルが押されたらスクリプトを終了する
  if (input.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // URLが不正と思われる場合は処理を中止する。
  if (!input.getResponseText().match(/^(http|https):\/\/.+\.csv$/i)) {
    ui.alert('正しいURLを入力してください');
    return;
  }

  // 入力されたURLにアクセスする
  let response = UrlFetchApp.fetch(input.getResponseText());

  // レスポンスの中からコンテンツを取得する
  let text = response.getContentText(); //文字化けする場合はここに"shift_jis"を入れてみてください。

  // CSVとしてパースする
  csv = Utilities.parseCsv(text);

  // シートに書き込むために範囲を定義する。範囲はcsvの行数、列数を元にする
  let range = sheet.getRange(1,1,csv.length, csv[0].length);

  // CSVデータをシートに書き込む
  range.setValues(csv);
  
}

関連するアプリ


タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp