GASでCSVデータをスプレッドシートに転記する方法

GASでCSVデータをスプレッドシートに転記する方法

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>
注意点

「プロジェクトの設定」で「Chrome V8 ランタイムを有効にする」のチェックが外れていないとスクリプトが動かないようです。

理由はいずれ解き明かします。

さいごに

今回もたくさんのことをGoogle検索しながら到達しました。みなさんありがとうございます。

でもやっぱり、ローカルのCSVをスプレッドシートに抽出するだけなら、ファイルからインポートが一番早いですね笑

受信したGmailに添付されているCSVを自動で抽出して数値計算を行って請求書をPDF化して送る、みたいなシーンで活用できそうです。

スポンサーリンク