如果由公式Google Apps Script

时间:2017-10-19 20:05:07

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

除了获取一行数据外,此程序运行正常。它总是抓住一组空白。有人看到我错过了吗?复制和粘贴愚蠢的行应该很简单。

我需要从编辑行中的D:BA中获取数据。接下来,删除创建数据的公式,然后将保存的数据粘贴回行中,以便我自定义它。

function onEdit(e) {
  if(e.range.columnStart != 1 ||
     e.source.getActiveSheet().getName() != "Loads")
     /*e.source.getActiveSheet().getName() != "Loads") || 
     e.range.rowStart != 9 || e.range.columnStart != 1 ||
     e.range.rowEnd != 53 || 
     e.range.columnEnd != 1*/
    ){ 
    return;
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Loads");
    var arr = [];
    var r = e.range.getRow();
    var cell1 = sheet.getRange(r,1);
    var cell2 = sheet.getRange(r,2);
    var lastColumn = sheet.getLastColumn();
    var row = sheet.getRange(r,4,49,49);
    var value = e.value;
    var arr = [];

    // get cell 2
    var cell2value = cell2.getValue();
    // delete cell
    cell2.clear();
    //paste formula
    cell2.setFormula('=split(REGEXREPLACE(A'+r+',\",\",\", \"),\",\",true)');

    // copy row r,3,1,40
    //var row2 = sheet.getRange(r,4,1,10);
    var rowValues = row.getValues();

    //push row values to array
    arr.push(rowValues);
    // clear e.range
    cell1.clear();  
    // delete cell
    cell2.clear();
    // paste cell
    //cell2.setValue(cell2value);
    // paste row
    row.setValues(arr);
  }
};

1 个答案:

答案 0 :(得分:0)

首先,您的逻辑永远不会被执行:如果您的if()条件评估为trueonEdit(e)执行return&没有其他事情发生,否则(当if()评估为false时)没有其他代码要执行。您可能意味着if(!foo){ return; },否则您需要添加else子句。此外,如果编辑其他“载荷”的任何工作表上的单元格A1,则if()条件将评估为true:我不确定这是否是您想要的。你可能想在这里使用逻辑AND。

接下来,您只是从“载荷”工作表中获取数据:您从不参考编辑过的工作表中的行。您可能需要2个工作表对象:一个用于已编辑的工作表,您可以使用ss.getActiveSheet()& “负荷”的第二个。

当您拨打sheet.getRange()时,您也会抓取49x49阵列,这意味着您的range.getValues()来电也会返回49x49数值,这不是您想要的说明。你的意思是sheet.getRange(r,4,1,49)? (返回1x49数组。)

arr.push(rowValues)将您的2D数组rowValues推送到arr[]中的新数组元素,使arr[]成为3D数组(arr[0]包含49x49数组rowValues)。如果您需要将rowValues复制到另一个变量,只需指定它:var arr = rowValues;

您是否尝试清除公式表单cell2?如果是这样,您需要设置一个空公式,因为range.clear()会保留公式。

其他一切似乎都运转良好,但我不确定你到底想要做什么。我希望这有帮助,所以。