我正在尝试使用App脚本编写一些代码,这些脚本(通过每日触发)将数据从F13:G13单元格复制/粘贴到I列中的第一个空单元格。这是我的代码:
function TrackCurrentValues()
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheets()[0];
var lastRow = getLastRowInColumn(sheet, 'I:I');
// Logger.log('I' + parseInt(lastRow + 1));
var pasteRange = sheet.getRange('I' + parseInt(lastRow + 1) );
pasteRange.activate();
// now that we have the first empty cell in column I, paste the values we found from cells F13:G13
spreadsheet.getRange('F13:G13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
function getLastRowInColumn(sheetObj, range) {
return sheetObj.getRange(range)
.getValues().filter (String).length + 1
}
运行时,发生的是从正确的位置复制了数据,但始终将其粘贴到单元格A1中。而且,粘贴的数字前面带有英镑字符(£)。
可能是什么问题?如果我手动运行它,它通常会起作用。最主要的是,它在I:I中找不到空单元格。
答案 0 :(得分:1)
此代码应满足您的需求:
function TrackCurrentValues(){
var sheet = SpreadsheetApp.getActive().getSheets()[0];
var lastRow = getLastRowInColumn(sheet, 'I:I');
var pasteRange = sheet.getRange(lastRow + 1,9,1,2);
var copyRange = sheet.getRange(13,6,1,2)
pasteRange.setValues(copyRange.getValues())
};
function getLastRowInColumn(sheetObj, range) {
return sheetObj.getRange(range).getValues().filter(String).length
}
关于您的问题,该范围很可能被格式化为显示该货币符号。要对此进行更新,请选择范围,转到工具栏,然后选择格式>数字>指定您想要的格式
其他想法: i)您要向lastRow变量添加两次(一次在getLastRowInCOlumn函数中,一次在pasteRange定义中) ii)我建议不要使用“有效范围”来存储位置,而是将该范围存储在变量中 iii)看来您的复制范围是2列宽,但是pasteRange只是1列宽