LV. 17
GP 36

【心得】Google Apps Script 一些程式碼

樓主 Zn₂Fe(PO₄)₂•4H₂O sp21804173
GP8 BP-
安安,尼好,我是Javascript新手。
看到板上的教學文,讓我也想寫教學了w
為了讓人不要重覆造輪子
我來貼一些程式碼。
目錄
1.Dark Mode
2.好像沒有console.log(); 我都用Logger.log();
3.使用試算表儲存資料
//註冊功能
//得到巴哈帳號在第幾列
//得到儲存的資料
//儲存資料
4.從Google Drive上傳圖片
//上傳到imgur
//上傳到巴哈姆特
5.其他
//檢查字串是否有重覆字元
//得到隨機數字
//string format功能
//把string轉成integer


1.Dark Mode
https://chrome.google.com/webstore/detail/appsscript-color/ciggahcpieccaejjdpkllokejakhkome?hl=zh-TW

2.好像沒有console.log(); 我都用Logger.log();
ctrl+enter可查看紀錄

3.使用試算表儲存資料
var SpreadSheet = SpreadsheetApp.openByUrl('試算表網址');
var SheetName = SpreadSheet.getSheetByName('工作表名稱');//注意這是試算表頁面最下面的"工作表"
var userdata = SheetName.getSheetValues(1,1,SheetName.getLastRow(),1); //得到第1行的所有資料
//getSheetValues(起始列,起始行,共幾列,共幾行) ex:getSheetValues(3,8,2,1) > 得到 H3 和 I3
var lastrow = SheetName.getLastRow(); //得到最後一列是第幾列
var lastrowminus = lastrow-1;

//註冊功能
function reg(){
  for(i=0;i<lastrow;i++){
    if(userdata[i][0] == senderId){
      botReply("你已經註冊過了。同樣的話,請別讓我說第二遍。");
      botReply("淚眼路卡,請別讓我說第三次。");
      break;
    }else if(i == lastrowminus){
      SheetName.getRange((SheetName.getLastRow()+1), 1, 1, 1).setValue(senderId); //在試算表記下巴哈帳號
        //getRange(起始列,起始行,共幾列,共幾行)
      botReply('註冊成功,你現在是我們組織 Passione 的一員了。');
    }
  }
}

//得到巴哈帳號在第幾列
function get_id_row(id){
  for(i=0;i<lastrow;i++){
    if (userdata[i][0] == id) {
      return i; //i是從0開始數的
      break;
    }else if(i == lastrowminus){
      return -100; //找不到巴哈ID就回傳-100
    }
  }
}

//得到儲存的資料, id是巴哈帳號
function id_get_value(id,column){
  var user_row = get_id_row(id)+1;
  if (user_row > 0) {  //找的到巴哈ID才會執行
    var value = SheetName.getSheetValues(user_row,column,1,1);
    return value[0][0];
  }else if(user_row<=0){ //找不到巴哈ID
    return -100;
  }
}

//儲存資料, id是巴哈帳號
function id_value_set(id,column,value){
  var user_row = get_id_row(id)+1;
  if (user_row > 0) {  //找的到巴哈ID才會執行
    SheetName.getRange(user_row, column, 1, 1).setValue(value);
  }
}

4.從Google Drive上傳圖片

//上傳到imgur
//imgur api文件 https://apidocs.imgur.com/
//註冊imgur api
//https://api.imgur.com/oauth2/addclient

function imgur_upload(){
    var files = DriveApp.getFilesByName('圖片的名字');
    //這是一個FileIterator物件 詳見https://developers.google.com/apps-script/reference/drive/file-iterator.html
    var file = files.next().getBlob();
    //使用next()會得到File物件。使用getBlob()會得到Blob,也就是Binary Large Object,儲存影像資料
    //詳見https://developers.google.com/apps-script/reference/drive/file
    var settings = {
      "url": "https://api.imgur.com/3/image",
      "method": "POST",
      "timeout": 0,
      "headers": {
        "Authorization": "Client-ID 123123" //把123123改成你的imgur Client-ID
      },
      "processData": false,
      "mimeType": "multipart/form-data",
      "contentType": 'multipart/form-data',
        //這邊卡了我好久,不能寫image/jpeg或image/png,只能寫multipart/form-data
        //Google的文件寫"No need to specify contentType. Because payload is a JavaScript object, it will be interpreted as form data."
        //https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
        //http://www.runoob.com/http/http-content-type.html
      'payload' : file
    };
    var url = "https://api.imgur.com/3/image";
    var response = UrlFetchApp.fetch(url, settings).getContentText();
    //UrlFetchApp的fetch method可以發送請求並得到傳回來的東西,也可以得到網頁的html。
    //https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl-params
    var json = JSON.parse(response); //JSON不是程式碼, 是格式
    Logger.log(json.data.link); //json.data.link就是圖片的網址了,可以記在試算表裡面。
    Logger.log(json.data.deletehash); //刪除圖片用的hash
}

//上傳到巴哈姆特 單純上傳而已 沒有傳送的功能

function haha_upload(){
  var files = DriveApp.getFilesByName('圖片的名字');
  var file = files.next().getBlob();
  var formData = {
    "filedata": file
  };
  var settings = {
    "method": "POST",
    'payload' : formData
  };
  var url = "https://us-central1-hahamut-8888.cloudfunctions.net/imagePush?bot_id=(你的bot_id)&access_token=(你的access_token)"
  var response = UrlFetchApp.fetch(url, settings).getContentText();
  Logger.log(response); //response就是圖片的參數了,可以記在試算表裡面。
}

5.其他
//檢查字串是否有重覆字元 https://stackoverflow.com/questions/33656708/check-for-repeated-characters-in-a-string-javascript
function check_repeat(str){
    for (var i=0; i<str.length; i++) {
      if ( str.indexOf(str[i]) !== str.lastIndexOf(str[i]) ) {
        return false; // repeats
      }
    }
  return true;
}

//得到隨機數字
function getRandom(min,max){
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

//https://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format/4673436#4673436
//string format功能
if (!String.prototype.format) {
  String.prototype.format = function() {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function(match, number) {
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    });
  };
}

//把string轉成integer
https://stackoverflow.com/questions/11121837/google-spreadsheet-script-getvalues-force-int-instead-of-string/11128836
8
-
未登入的勇者,要加入 2 樓的討論嗎?
板務人員:

0 筆精華,吸收日月精華中
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】