2017-01-31 24 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

相关问题