如何将值从一张纸粘贴到另一张纸到特定列的最后一行

时间:2019-11-05 18:57:19

标签: javascript google-apps-script google-sheets

应用脚本的新手,但是通过大量研究成功地构建了自己的脚本,但是现在我的脚本遇到了错误。下面是我当前的代码:

  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列中?预先感谢。

2 个答案:

答案 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)');