使用下面的函數load_table()
,我將一個谷歌文檔電子表格的內容加載到一個哈希變量tbl
。使用幫助函數test_hash()
我可以看到,tbl
在load_table()
之內,以及bt
,cod
和st
之間可見,其中還包含來自電子表格的數據(cod
是常數)。一切都如預期。谷歌應用程序腳本:返回多個對象
當我嘗試將它們放入另一個散列變量res
返回所有這些變量,我失去tbl
:由於某種原因tbl
是空白的,而其它變量有預期。任何想法爲什麼發生這種情況?謝謝。
function load_table(ss_data , colPos) {
// create hash from ss_data
// ========================
var bt = [];
var st = [];
var tbl = [];
var cod = '';
for (var i = 1; i < ss_data.length; i++) {
cod = ss_data[i][0]
bt[ ss_data[i][1] ] = 1;
st[ ss_data[i][2] ] = 1;
tbl[ ss_data[i][1] + '~' + ss_data[i][2] ] = ss_data[i][colPos];
}
test_hash(tbl);
var btLvls = Object.keys(bt).sort();
var stLvls = Object.keys(st).sort();
var res = {};
res['cod'] = cod;
res['bt'] = btLvls;
res['st'] = stLvls;
res['tbl'] = tbl;
test_hash(tbl);
test_hash(res);
return res;
}
test_hash()
是一個簡單的調試功能:
function test_hash(h) {
Logger.log(" --------- HASH START -------- ");
for (var index in h){
Logger.log(index + ':' + h[index])
}
Logger.log(" --------- HASH END -------- ");
}
這是對應doGet()
功能:
function doGet(){
// counts by yearmo
var liveid = 'xxxxx'
var testid = 'yyyyy'
var ss = SpreadsheetApp.openById(testid);
var data = ss.getDataRange().getValues();
var rencat_nbtids = load_table(data , 3);
var rencat_nstids = load_table(data , 4);
var rencat_nsubs = load_table(data , 5);
Logger.log(rencat_nbtids);
}
這個問題會隨着樣本數據的增加而改善 - 一個帶有效數據的'test()'函數的例子會有幫助。如果你更願意提供公開表,那很好。但在目前的狀態下,這個寫得很好的問題變成了很多工作。 – Mogsdad 2013-05-11 14:44:05