应用脚本的新手,但是通过大量研究成功地构建了自己的脚本,但是现在我的脚本遇到了错误。下面是我当前的代码:
function MyFunction() {
var sss = SpreadsheetApp.getActive();
var ss = sss.getSheetByName('Daily Sales');
var range = ss.getRange('B8:H83');
var data = range.getValues();
var OUrange = ss.getRange('K8:Q83');
var OUdata = OUrange.getValues();
var ts = sss.getSheetByName('Tracker');
ts.getRange(ts.getLastRow()+1, 1,data.length, data[0].length).setValues(data);
ts.getRange(ts.getLastRow()+1, 1,OUdata.length, OUdata[0].length).setValues(OUdata);
}
在“每日销售额”工作表中,我从BH和KQ列复制值,并将其粘贴到“跟踪器”工作表的最后一行,从A列开始。在K. Col中的“每日销售额”值正确粘贴在BH值以下,因此对这些结果感到满意。
在“跟踪器”页面上,这些值在A-G列中。但是,我此后基于脚本数据在H列和I列中添加了基于脚本数据的公式,并在H列中手动添加了这些公式。这些公式被复制到工作表的整个列中(即行5000)。由于添加了这些公式,因此脚本现在将值粘贴到A5001中。
我意识到这是由于这些公式引起的,但是有没有一种方法可以更新我的脚本以粘贴到A列的最后一行中,同时又将这些公式保留在I列和J列中?预先感谢。
答案 0 :(得分:0)
您可以创建一个辅助函数来计算给定列的第一行(而不是包含公式的列)
function MyFunction() {
var sss = SpreadsheetApp.getActive();
var ss = sss.getSheetByName('Daily Sales');
var range = ss.getRange('B8:H83');
var data = range.getValues();
var OUrange = ss.getRange('K8:Q83');
var OUdata = OUrange.getValues();
var ts = sss.getSheetByName('Tracker');
var values = data.concat(OUdata).filter(function (r) {return r[0]});
var fr = findFirstFreeRow(ts, 1) // second parameter represents column to check for first free row
ts.getRange(fr, 1,values.length, values[0].length).setValues(values);
}
function findFirstFreeRow(sheet, colNum) {
var v = sheet.getRange(1, colNum, sheet.getLastRow()).getValues(),
l = v.length,
r;
while (l >= 0) {
if (v[l] && v[l][0].toString().length > 0) {
r = (l + 2);
break;
} else {
l--;
}
}
return r;
}
看看是否有帮助?
答案 1 :(得分:0)
从“跟踪器”工作表中删除多余的空行后,您可以使用appendRow
函数使用手动值创建新行(将需要公式的单元格留空)。
输入手动值后,您可以获取需要公式的单元格并在其上使用setFormula
。
为简洁起见,如果您希望A,B,C,E,F列具有手动值,而D列具有公式,则可以执行以下操作:
var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(['A','B','C','','E','F']);
sheet.getRange(sheet.getLastRow(),4).setFormula('=FORMULA(HERE)');