LoginSignup
12
19

More than 5 years have passed since last update.

個人的に使っているGoogleAppsScript Snippetsまとめ

Last updated at Posted at 2015-11-10

最近、GASが楽しい。仕事捗るし、スクレイピングやAPI叩くみたいなこともできるし、cron的な事もできるし。
ということで自分が使っているScriptを上げていこうと思います。(随時更新)

Sheetの全実データを配列取得

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var data = sheet.getDataRange().getValues();

  Logger.log(data);
}

HTTPリクエスト

function myFunction() {
  var response = UrlFetchApp.fetch(url);
  //Bod抜き出しには
  var body = response.getContentText();

  Logger.log(body);
}

行の重複チェック

function checkIds() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getDataRange().getValues();
  var last_row = sheet.getLastRow();
  var duplicate_id = "";
//  Logger.log(values);

  for(var i=2; i<=last_row; i++){
    for(var j=2; j<=last_row; j++){
      if(i==j) continue;
      if(values[i-1][0] == values[j-1][0]) {
        duplicate_id += "" + i + "が重複しています。";
      }
    }
  }

  if("" != duplicate_id) SpreadsheetApp.getUi().alert(duplicate_id);

}

セルの文字数チェック

トリガーをスプレッドシートの変更にいれてリアルタイムチェックが出来る。

function myFunction() {
  var cell = SpreadsheetApp.getActiveRange();
  Logger.log(cell.getValue());

  var val = cell.getValue();
  if(141 < val.length) {
    SpreadsheetApp.getUi().alert("文字数が超過しています。現在の文字数は" + val.length + "文字です。");
  }
}

入力したセルのイベントを受け取り2倍にする

トリガーをセルの変更に

function double() {
  var range = SpreadsheetApp.getActiveRange();
  var value = range.getValue();
  Logger.log(value);

  range.setValue(value*2);
}

HTMLパース

function htmlParse() {

var response = UrlFetchApp.fetch("http://en.wikipedia.org/wiki/Document_Object_Model");
var doc = XmlService.parse(response.getContentText()).getRootElement().getChild("head").getChild("title").getText();
Logger.log(doc);

}

URL一覧からメタタグのdesctiptionの取得

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var urlCol = 1;
  var startRow = 1;
  var lastRow = sheet.getLastRow();
  var reg = /<meta.*name\s*=\s*[\"|\']description[\"|\'].*content\s*=\s*[\"|\'].*?[\"|\'].*>/gi;
//  Logger.log(lastCol + "-" + lastRow);

  data = sheet.getRange(startRow,urlCol,lastRow);
  values = data.getValues();

  for(var i in values) {
    if("" == values[i] ) {
      continue;
    }

    var response = safeFetchUrl(values[i]);
    if(!response){
      continue;
    }

    var tag = response.getContentText().match(reg);
    if(null == tag) {
      continue;
    }

    var content = response.getContentText().match(reg)[0].replace(/(<meta.*content\s*=\")|(\".*>)/gi,"");
    var row = parseInt(i)+1;
    var range = sheet.getRange(row,urlCol+1);

    range.setValue(content);
  }
}

function double() {
  var range = SpreadsheetApp.getActiveRange();
  var value = range.getValue();
  Logger.log(value);

  range.setValue(value*2);
}

function safeFetchUrl(url) {
  var url = url;
  var response = UrlFetchApp.fetch(url, { muteHttpExceptions:true });
  if(response.getResponseCode() != 200) {
    Logger.log("This is dead link: " + url);
    return false;
  }

  return response;
}

URLの死活チェック

function safeFetchUrl(url) {
  var url = url;
  var response = UrlFetchApp.fetch(url, { muteHttpExceptions:true });
  if(response.getResponseCode() != 200) {
    Logger.log("This is dead link: " + url);
    return false;
  }

  return response;
}
12
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
19