gas
Snnipet

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

More than 3 years have passed since last update.

最近、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;
}