Skip to content

Instantly share code, notes, and snippets.

@freelze
Last active June 22, 2018 11:45
Show Gist options
  • Save freelze/f040357e4fb3fb4d5111944f455f805a to your computer and use it in GitHub Desktop.
Save freelze/f040357e4fb3fb4d5111944f455f805a to your computer and use it in GitHub Desktop.
// if use global variable, it will call create() three times.
var sheetID = create() // 84行
/* 目前做到的是:利用create()新增一個Google試算表,並取得sheetID
* 因為我有3個Function(爬流量,重置已發訊息量,刪除特定Trigger)會使用到sheetID
* 但是執行主程式Start()後,
* 會產生多個sheets
* 是因為sheetID是global variable,所以create()就call了3次(?)
* 請問有什麼方法可以存下sheetID,並給其他function使用?
*/
// 主程式
function Start()
{
DataflowReminderTriggers();
triggerFordeleteCertainTimeDrivenTriggers();
resetCount_LineNotifyTriggers();
}
/*function functionSet(){
var sheetID= create();
DataflowReminder(sheetID);
resetCount_LineNotify(sheetID);
deleteCertainTimeDrivenTriggers(sheetID);
}*/
// 爬流量
function DataflowReminder() {
//
// (省略)
//
var SpreadSheet = SpreadsheetApp.openById(sheetID);
//
}
// 爬流量的Trigger,每一分鐘執行一次
function DataflowReminderTriggers() {
// Trigger every Minute at 8 o'clock
var tID = ScriptApp.newTrigger('DataflowReminder')
.timeBased()
.inTimezone("Asia/Taipei") // http://joda-time.sourceforge.net/timezones.html
.atHour(8)
.everyDays(1)
.everyMinutes(1)
.create();
// store this triggerID in sheet
var allTriggers = ScriptApp.getProjectTriggers();
for(var i = 0; i < allTriggers.length; i++) {
var cID = allTriggers[i].getUniqueId();
}
var SpreadSheet = SpreadsheetApp.openById(sheetID);
var Sheet = SpreadSheet.getSheetByName("工作表1");
Sheet.getRange(2, 1).setValue(cID);
}
// 重置已發訊息量
function resetCount_LineNotify()
{
var SpreadSheet = SpreadsheetApp.openById(sheetID);
var Sheet = SpreadSheet.getSheetByName("工作表1");
Sheet.getRange(1, 1).setValue(0);
}
// 重置已發訊息量的Trigger,每天凌晨兩點執行一次
function resetCount_LineNotifyTriggers() {
// Trigger every Minute at 2 o'clock
ScriptApp.newTrigger('resetCount_LineNotify')
.timeBased()
.inTimezone("Asia/Taipei") // http://joda-time.sourceforge.net/timezones.html
.atHour(2)
.everyDays(1)
.create();
}
// 利用sheet上面存的sheetID,來刪除特定Trigger
function deleteCertainTimeDrivenTriggers() {
var SpreadSheet = SpreadsheetApp.openById(sheetID);
var Sheet = SpreadSheet.getSheetByName("工作表1");
var cID = Sheet.getRange(2, 1).getValue();
// Loop over all triggers
var allTriggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < allTriggers.length; i++) {
if (allTriggers[i].getUniqueId() == cID) {
Logger.log("Delete");
ScriptApp.deleteTrigger(allTriggers[i]);
break;
}
}
}
// 刪除特定Trigger的trigger,每天凌晨兩點執行一次
function triggerFordeleteCertainTimeDrivenTriggers() {
// Trigger every Minute at 2 o'clock
ScriptApp.newTrigger('deleteCertainTimeDrivenTriggers')
.timeBased()
.inTimezone("Asia/Taipei") // http://joda-time.sourceforge.net/timezones.html
.atHour(2)
.everyDays(1)
.create();
}
// 找"GAS"資料夾ID,並在該資料夾內建立一個sheet
function create(){
var folderId = getFolderID("GAS");
var sheetID = createSpreadsheets(folderId);
return sheetID
}
// 在該資料夾新增一個Google試算表,並回傳該試算表ID
// https://productforums.google.com/forum/#!msg/docs/VQcnThJPuY0/0OTD_IqjCwAJ
function createSpreadsheets(folderId) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var df = DriveApp.getFolderById(folderId);
var newSS = SpreadsheetApp.create('Google試算表名稱');
var driveFile = DriveApp.getFileById(newSS.getId());
df.addFile(driveFile);
DriveApp.removeFile(driveFile);
return newSS.getId();
};
// 找資料夾名稱,回傳id
// https://googleappsscriptdeveloper.wordpress.com/2017/03/04/how-to-find-your-google-drive-folder-id/
function getFolderID(folderName)
{
var folders = DriveApp.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
if(folder.getName() == folderName)
{
return folder.getId();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment