我想有輸出時,在我的電子表格中的特定單元格的值發生變化的時間線功能:添加時間軸,當單元格的值被改變(谷歌腳本)
在單元格A1是從變化的值時常。當A1改變時,我想在B1中添加當前值。 C1顯示值已被更改的時間戳。
下一次更改A1時,新值顯示在B2上,即C2上的時間戳。第三個改變是B3/B4,第四個改變是B4/C4,依此類推。
它似乎對我來說這是一個每一個通常的谷歌形式的功能,但我不知道如何將其轉換爲自定義腳本。
任何人都可以幫忙嗎?
我想有輸出時,在我的電子表格中的特定單元格的值發生變化的時間線功能:添加時間軸,當單元格的值被改變(谷歌腳本)
在單元格A1是從變化的值時常。當A1改變時,我想在B1中添加當前值。 C1顯示值已被更改的時間戳。
下一次更改A1時,新值顯示在B2上,即C2上的時間戳。第三個改變是B3/B4,第四個改變是B4/C4,依此類推。
它似乎對我來說這是一個每一個通常的谷歌形式的功能,但我不知道如何將其轉換爲自定義腳本。
任何人都可以幫忙嗎?
這是一個示例代碼,可以根據需要選擇更新的值,通過使用push或unshift將新值添加到列B或C的頂部或底部......我更喜歡不移位原因I給在發表評論,但它給你;-)
function timeline() {
var sh = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
if(sh.getActiveRange().getA1Notation()!='A1'){return}
var last = lastRowinCol(sh,'B');
var cellA = sh.getRange('A1').getValues();
var colB = sh.getRange('B1:B'+last).getValues();
var colC = sh.getRange('C1:C'+last).getValues();
// colB.unshift(cellA); // add on top
// colC.unshift([new Date()]);
colB.push(cellA); //add at the bottom
colC.push([new Date()]);
sh.getRange(1,2,colB.length,1).setValues(colB);
sh.getRange(1,3,colC.length,1).setValues(colC);
}
function lastRowinCol(sh,col){
var coldata = sh.getRange(col+'1:'+col).getValues();
for(var c in coldata){if(coldata[c][0]==''){break}}
return c
}
注:還有其他的方式來實現這一點,但這個是相當「說教」我想......使用數組,子功能調用,批量讀取和寫...
編輯:我忘了提及,你需要分配一個onEdit觸發器的功能,讓它自動執行。
編輯2:從Mogsdad了非常中肯的意見遵循以下建議你用他的代碼,遍歷向後,這樣它處理空單元格列替換for-next循環中function lastRowinCol
。此外,他的代碼有一個有趣的結構,因爲循環限制和條件都在同一個語句中。
function lastRowinCol(sh,col){
var coldata = sh.getRange(col+'1:'+col).getValues();
for (var c=coldata.length; (c) && coldata[c-1][0]==''; c--) {}
return c
}
A1值如何變化?是否直接由SS中的用戶?如果最新的數據位於列的頂部,您不認爲閱讀起來並不容易嗎?在你描述的情況下,經過一些改變後,你不會看到最新的價值......他們會在頁面的底部... – 2013-03-04 16:50:49