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