加賀一稿一記

心は戦国

自分用メモ・GAS

久しぶりに書こうとしてすっかり忘れていたので,次忘れたときのためにまとめておく.
簡易なサーバとして使えなくもない.


スプレッドシート基本操作
高度な操作は多すぎるのでパス.

//フォーム選択
var form = SpreadsheetApp.openById("ここにid").getSheetByName("ここにシート名");

//フォーム(シート)の(y,x)にアクセス
//値を得る
form.getRange(y,x).getValue();
//値を書き込む
form.getRange(y,x).setValue(114514);

//フォームの最終行
var LastRow = form.getLastRow();


データを取ってくる
AOJからユーザーデータを取ってくるサンプル.
ログは[表示]->[ログ]もしくは[Ctrl+Enter]で確認できる.

function aoj(){
  //ユーザーid
  var id = "kagasan";
  //アクセス先
  var url = "http://judge.u-aizu.ac.jp/onlinejudge/webservice/user?id="+id;
  //取ってくる
  var response = UrlFetchApp.fetch(url);
  //パース
  var xml = XmlService.parse(response.getContentText());
  //ログに表示
  Logger.log(xml.getRootElement().getChild("name").getText());
  Logger.log(xml.getRootElement().getChild("status")
.getChild("solved").getText());
}


ウェブページを表示する
ドライブ他Googleの機能といい感じに連携したウェブページができて便利(な気がする).
ボタンを押すとプロンプトが出て,入力した内容がスプレッドシートに記入されるサンプル.

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

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

function logwrite(s){
  var form = SpreadsheetApp.openById("ここにスプレッドシートのid").getSheetByName("ここにシートの名前");
  form.getRange(1,1).setValue(s);
  return s="保存しました.";
}
<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8">
    <base target="_top">
  </head>
  <?!= include('index.css.html'); ?>
  <?!= include('index.js.html'); ?>
  <body>
    <div id = "txt"></div>
    <input type="button" value="押してね" onclick="btn()"/>
  </body>
</html>
<!-- index.css.html -->
<style>
#txt{
    color:red;
}
</style>
<!-- index.js.html -->
<script>
function btn(){
    var obj = prompt("適当に入力してください.","");
    google.script.run.withSuccessHandler(success).withFailureHandler(fail).logwrite(obj);
    function success(obj){
        document.getElementById("txt").innerHTML=obj;
    }
    function fail(){
        document.getElementById("txt").innerHTML="失敗しました.";
    }
}
</script>