インターネット上にあるCSVファイルをシートに直接取り込むGoogle Apps Scriptです。オープンデータ等の取り込みが楽になるかもしれません。
特にありません。今お使いのスプレッドシートに組み込めます。
上部のメニューから「インターネット上のCSVファイルを読み込む」を実行します。
インターネット上のCSVファイルのURLを入力します。今回は例として東京都の「新型コロナウイルス感染症検査陽性者の状況」をお借りしました。
シートにCSVの中身が展開されます。
スクリプトを実行したときに開いているシートに書き込まれます。上書きされると困るデータがある場合は新しいシートを開いてからスクリプトを実行してください。
入力されたURLが不正と判断されると、「正しいURLを入力してください」というエラーメッセージが表示されてスクリプトが終了します。
以下のCSVファイルはうまく読み込めないと思われます。
1つ目についてはgetContentText('Shift_JIS')にすることで回避できます。
2つ目はparseCsv()が対応していないようです。CSVパーサーを自分で実装しないとダメそうです。
/**
* このスクリプトの説明、使い方はこちら。
* 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);
}