2017-01-31 20 views
0

目前我使用下面的腳本:粘貼爲值當單元格爲空(谷歌應用程序腳本)

function moveValuesOnly() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var source = ss.getRange('Sheet1!C16:C16'); 
    source.copyTo(ss.getRange('Sheet2!A1'), {contentsOnly: true}); 
    source.clear(); 
} 

但是我想在Sheet2中粘貼的數據與每週生成新的數據追加。

因此,每週更新一次sheet1並更改'Sheet1!C16'中的值。我想在'Sheet2!A2'中附加這個。等等。

那麼如何編輯這個腳本以確保新值被複制到下一個空單元格中(所以當'Sheet2!A1'有一個值從'Sheet1!C16'中獲取新值並將其複製到' Sheet2!A2'。當'Sheet2!A1'有一個值時,將'Sheet1!C16'的新值複製到'Sheet2!A3'

我需要在一年中的所有星期爲了安全起見53周)

日Thnx提前!

回答

0

這取決於,你可以做幾件事情。

第一個是最簡單的,但是有一個條件。如果每週複製到單元格A1A2A3並且只是繼續下降,那麼每個星期您複製的數據總是最低。例如,如果您希望將數據複製到單元A3,這意味着在任何列中具有任何數據的最後一行是行2。這樣你所需要做的就是獲得這樣的範圍:ss.getRange(ss.getLastRow() + 1, 1)

另一種方法是使用PropertiesService來存儲哪一行是最後一個正在使用的行。在腳本運行,獲取價值

var nextRow = PropertiesService.getScriptProperties().getProperty('property we added before') 

,然後當你的目標範圍內使用

ss.getRange(nextRow, 1) 
PropertiesService.getScriptProperties().setProperty('property we added before', nextRow + 1) 

這樣,每次你的下一行,你的下一次更新屬性你希望運行。有了這個,你還需要記住,你可能想在一年後重置櫃檯。

0

感謝您的回覆。第一個選擇是去我的思考方式,但是我對getlastrow得到一個錯誤:

function moveValuesOnly() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var source = ss.getRange('Sheet1!C16:C16'); 
    source.copyTo(ss.getRange(ss.getLastRow() + 1, 1), {contentsOnly: true}); 
    source.clear(); 
} 

嘗試添加「!Sheet2的A1」,但沒有奏效。我忘了/做錯了什麼?

僅供參考我提供了drive doc: https://docs.google.com/spreadsheets/d/1Oe6fQ5KvYt1X8SkDUl2c5bLrKTQR9tOr0dm55ot0eoI/edit?usp=sharing

相關問題