見出し画像

【GoogleAppsScript】ダイアログを使ってPC内のTXT(テキスト)ファイルをGoogleスプレッドシートに取り込む方法

Googleドライブ上のファイルを取り込み

Googleドライブ上にあるファイルであれば

フォルダを取得
DriveApp.getFolderById(フォルダID)

ファイルを取得
DriveApp.getFileById(ファイルID)

この2つを使えば、Googleシート内にファイルの取り込みが簡単にできます。

PC内のTXT(テキスト)ファイルを取り込む

PC内のTXT(テキスト)ファイルを取り込む場合は、ひと工夫が必要です。GASのスクリプトでは自分のPC上には直接アクセスが出来ないので(できる方法があるかも・・・?)ダイアログを使って、ファイルを読み込ませる動作をひとつ入れます。

まずはGoogleスプレッドシートの新規ファイルを作成します。

画像1

画像2



ファイルを開いたら「スクリプトエディタ」を開きます。

画像3



Class HtmlService

Class HtmlService | Apps Script | Google Developers

HtmlService.createHtmlOutputFromFileを使って、スクリプト上にあるHTMLファイルを読み込んで、モーダルダイアログで読み込みの画面を表示させます。

function importFile() {
var html = HtmlService.createHtmlOutputFromFile(“index”);
SpreadsheetApp.getUi().showModalDialog(html, ‘ローカルファイル読込’);
}

画像4

このままimportFile() 関数を実行しようとすると

「index」というHTMLファイルは見つかりませんでした。

と警告されます。「index.html」というファイルが見つからないためです。

画像5



index.htmlファイル作成

ファイル>New>HTMLファイル


ファイル名は「index」としておきましょう(拡張子は不要です)


「index.html」ファイルが作成されました!


スクリプト実行

実行したらどうなるのか試してみます。

画像6



モーダルダイアログが表示されました!
\(^o^)/

画像15


form
<form id="openForm" onsubmit="importFile(this)" enctype="multipart/form-data">
<input name="openFile" type="file" /><br><br>
<button type="submit">読込</button>
</form>
ファイル読み込み用の「ファイルを選択」ボタンと「読込」ボタンを追加します。

表示されました!

画像7



フォームの表示を追加しただけですので・・・

「読込」ボタンを何百回押しても、何も動作はしません。

画像8



GASの関数を呼び出し

index.htmlの「読込」を押した時にGASの関数を呼び出せるように仕掛けを入れてあげます。

<head>
<base target="_top">
<script>
// フォーム送信で実行
function importFile(formFile) {
// GASの関数を呼び出す↓
google.script.run.writeToSheet(formFile);
}
</script>
</head>
これで、onsubmit=時にimportFileが実行されて、GAS内の関数が実行されます。

<form id="openForm" onsubmit="importFile(this)" enctype="multipart/form-data">


取り込みを実行させる

.gsに関数を追加します。

function writeToSheet(formFile) {
// フォームで指定したファイルを読み込む
var fileBlob = formFile.openFile;
// テキストとして取得
var text = fileBlob.getDataAsString(“sjis”);
// 書き込むシートを取得する
var sheet = SpreadsheetApp.getActiveSheet();
// テキストファイルをシート(A1セル)に書き込む
sheet.getRange(1, 1).setValue(text);
// 取り込み出力
Browser.msgBox(“ファイルを読み込みました”);
}

画像9

画像10

画像11



取り込めました!

画像12


文字コード修正

文字コードが違ったようなので、修正してみます。
// var text = fileBlob.getDataAsString(“sjis”);
var text = fileBlob.getDataAsString(“utf-8”);

画像13



できました!

画像14



という感じで、PC上からファイルを読み込んでGoogleスプレッドシートにデータを取り込むことが出来ました!

ご参考下さい!

この記事が気に入ったらサポートをしてみませんか?