加賀一稿一記

心は戦国

自分用メモ・スプレッドシートの内容を出力する

スプレッドシートに書き込んだ内容をcsv(もしくはjs形式)で出力する.
あまりに汚くて読みにくいうえに非効率的なので後で書き直す.

//main.gs
function doGet(request) {
  return HtmlService.createTemplateFromFile('index.html').evaluate()
    .setSandboxMode(HtmlService.SandboxMode.IFRAME);
}

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .getContent();
}

function get(s){
  var form = SpreadsheetApp.openById("スプレッドシートのid").getSheetByName("シート名");
  var LastRow = form.getLastRow();
  var LastColumn = form.getLastColumn();
  var sc = s[0];
  var flg = s[2];
  var dc = s[3];
  if(flg)s = "var "+s[1]+"=[\n";
  else s = "";
  for(var i=1;i<=LastRow;i++){
    if(i>1 && flg)s+=sc;
    if(flg)s+="[";
    for(var j=1;j<=LastColumn;j++){
      if(j>1)s+=sc;
      if(dc)s+="\"";
      s+=form.getRange(i, j).getValue();
      if(dc)s+="\"";
    }
    if(flg)s+="]";
    s+="\n";
  }
  if(flg)s+="];"
  return s;
}
<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
    <base target="_top">
    <script>
    function btn(){
    var form = document.forms.fm;
    var obj = [fm.sc.value,fm.an.value,fm.flg.checked, fm.dc.checked];
    google.script.run.withSuccessHandler(success).withFailureHandler(fail).get(obj);
    function success(obj){
    form.ta.value=obj;
    }
    function fail(){
    form.ta.value="失敗";
    }
    }
    function DL(){
    var form = document.forms.fm;
    var content = form.ta.value;
    var blob = new Blob([ content ], { "type" : "text/plain" });
    if(window.navigator.msSaveBlob){
    window.navigator.msSaveBlob(blob, "test.txt"); 
    window.navigator.msSaveOrOpenBlob(blob, "test.txt"); 
    }
    else{
    document.getElementById("download").href = window.URL.createObjectURL(blob);
    }
    }
    </script>
  </head>
  <body>
  <h1>CSV出力器</h1>
  <input type="button" value="押してね" onclick="btn()"/>
  <form name='fm'>
  配列名(js形式出力用)<input name="an" type='text' value='data' style='width: 30px;'/><br>
  区切り文字<input name="sc" type='text' value=',' style='width: 30px;'/><br>
  jsの配列形式で出力<input name="flg" type='checkbox'/><br>
  ""でくくって出力<input name="dc" type='checkbox'/><br>
  <textarea name='ta'  rows="5" cols="40">
  ここにファイルが生まれるハズ
  </textarea><br>
  </form>
  <a id="download" href="#" download="download.csv" onclick="DL()">ダウンロード</a>
  </body>
</html>