2014年1月22日 星期三

Class Sheet getSheetValues方法

(google apps script)
取出儲存格範圍內的值
語法:

getSheetValues(startRow, startColumn, numRows, numColumns)
getSheetValues(起始列號,起始行號,列展延量,行展延量)

準備工作:
請在A2:H8內輸入任意內容,接下來再進入 工具 / 指令碼編輯器內將以下的代碼COPY貼上
//**** 取出儲存格範圍內的值
//getSheetValues(startRow, startColumn, numRows, numColumns)
//適用於取出有範圍的儲存格
//這個方法取出的值Values,可以先下用setValue 方法(記住沒有s喔)看一下格式全貌 或 用 Logger.log(values);來檢視
//樣貌如後 [14-01-23 00:02:52:601 HKT] [[*車種*, *車次*, *經由*, *發車站->終點站*, *臺北開車時間*, *花蓮到達時間*, *行駛時間*, *備註*],
//[自強, 202.0, -, 樹林->花蓮, -693958.7430555555, -693958.65625, 02小時05分, 逢週一、五至日行駛。新自強號(普悠瑪)列車,不發售無座票。],
function testrun(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();//指定工作簿
  var sheet = ss.getSheets()[1];//指定工作表
  //var cell=sheet.getRange("A21:H28");//這個表示法與 var cell=sheet.getRange(21, 1, 7, 8);相同
  var  values= sheet.getSheetValues(2, 1, 7, 8);//取得來源儲存格範圍內的值
  var cell=sheet.getRange(21, 1, 7, 8);//指定目地儲存格範圍
  cell.setValues(values);//要讓資料自動展開,不可用cell.setValue(values),不然不會分解值,會全部放在第一個儲存格
  //Logger.log(values);
}
這段代碼同時演示了[取值]與[賦值]的方法,
var cell=sheet.getRange(21, 1, 7, 8);這行代碼中的7、8因為必須與 values二維陣列變數大小一致,所以可以改寫成
var cell=sheet.getRange(21, 1, values.length, values[0].length);


其餘的在代碼內已有說明語法請自行演練,以下是我跑出來的結果

3 則留言:

  1. 感謝您的教學文章~
    實際執行上遭遇了一些問題,想跟您請教:
    執行到getSheetValues那行時,出現了"TypeError: 無法呼叫 undefined 的「getSheetValues」方法",請問這是正常狀況嗎?重新run了幾次都無法順利執行....

    回覆刪除
  2. 作者已經移除這則留言。

    回覆刪除
  3. 請問sheet.getSheetValues(),
    如果這欄位的值又有參考到別的欄位,
    有時會無法捉到資料,是否有改善的方法 ?
    謝謝 !

    回覆刪除