GASを使って、CSVファイルを任意のシートに転記するスクリプトをご紹介します。
きっかけはお客さまから伺った以下の内容でした。
???
とあるシステムからCSVを毎月ダウンロードしていて、それを手元のExcelに打ち込んでるんだよね。
りぴとん
いや! それたぶんもっと効率化できます! 少なくとも手打ちの部分!
ということで作成を開始しました。
よくよく考えるとファイルメニューからCSVをインポートすることはできるのですが、お客さまのアクションをちょっとでも少なくできればいいなと思った、ということにしておきます。。
目次
作成したコード
今回はスクリプトとHTMLの両方を使いました。
スクリプト
JavaScript
var ss = SpreadsheetApp.openById("XXX") //XXXに使うスプレッドシートのIDを入れます。
function showDialog(){
var html = HtmlService.createHtmlOutputFromFile("dialog");
SpreadsheetApp.getUi().showModalDialog(html, "CSVファイルをアップロードします。");
}
function uploadCsv(form) {
var blob = form.myFile;
var csvText = blob.getDataAsString("MS932");
var values = Utilities.parseCsv(csvText);
var mySheet = ss.getSheetByName("XXX"); //XXXにCSVデータを出力したいシート名を入れます。
mySheet.clear(); //※何か入力されていてエラーになるとアレなので、念のためクリアします。
mySheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}
りぴとん
XXXの部分は適宜変更してご利用ください。
HTML
HTML
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<form>
<input name="myFile" type="file">
<button onclick="uploadCsv(this.parentNode);">アップロード</button>
</form>
<script>
function uploadCsv(form) {
google.script.run.withSuccessHandler(function(){
google.script.host.close();
alert('アップロードしました');
}).withFailureHandler(function(){
alert('アップロードに失敗しました');
}).uploadCsv(form);
}
</script>
</body>
</html>
さいごに
今回もたくさんのことをGoogle検索しながら到達しました。みなさんありがとうございます。
でもやっぱり、ローカルのCSVをスプレッドシートに抽出するだけなら、ファイルからインポートが一番早いですね笑
受信したGmailに添付されているCSVを自動で抽出して数値計算を行って請求書をPDF化して送る、みたいなシーンで活用できそうです。