运行脚本时Google表格中的功能已损坏

时间:2019-03-20 20:26:30

标签: google-apps-script google-sheets

首先我会说我不知道​​自己在做什么。我幸免于在互联网上复制和粘贴代码,以供我和我的朋友们一起看电影的电子表格。

我遇到了一个问题,即当该行中的另一个单元格用脚本填充时,如果该行中的另一个单元格被更新,则我要使用当前日期来更新该单元格。 问题是,然后我在其旁边的单元格中使用一个函数,以给出单元格中标记为另一个日期的天数差异(就像正常的电子表格一样,这对我来说更容易做到)。但是每次脚本运行时,函数都会中断,并被文本“ #NUM!”替换。 (实际上,随着功能从其内部消失,该文本也随之出现。)

我尝试将其更改为 = U2 ,这也打破了。这是无法完成的事情吗?这位全能的谷歌大神没有给我答案,所以我在这里记了一下,希望得到救赎。

tl; dr Scrips看起来像是破坏了我查看它们所编辑单元格的任何工作表函数的单元格引用。怎么停?

在单元格V2中,我具有= DATEDIF(S2,U2,“ D”)函数 脚本波纹管(我不知道如何格式化)

function onEdit(event) {
var eventRange = event.range;
var sheetName = SpreadsheetApp.getActiveSheet().getSheetName();
if (sheetName == "Scores") {

  if (eventRange.getColumn() == 10) { //Check which is updated


    var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 21);//where to write

    var values = columnXRange.getValues();

  for (var i = 0; i < values.length; i++) {
    if (!values[i][0]) {  // If cell isn't empty
     values[i][0] = new Date();
    }
  }
  columnXRange.setValues(values);
}
}  
}

1 个答案:

答案 0 :(得分:0)

好的,我明白了。您正在寻找比您想要的更大的范围

var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, eventRange.getNumRows(), 21);

您只需要一个单元格的值来检查它是否为空。尝试将您的功能替换为:

function onEdit(event) {
  var eventRange = event.range;//makes shit happen?
  var sheetName = SpreadsheetApp.getActiveSheet().getSheetName();//checks current shit
  if (sheetName == "Scores") {//name of sheet want shit to happen

    if (eventRange.getColumn() == 10) { // 1 is column A, 2 is B ect

      // getRange(row, column, numRows, numColumns) sheet name to make not everywhere
      var columnXRange = SpreadsheetApp.getActive().getSheetByName("Scores").getRange(eventRange.getRow(), 21, 1, 1);//num is where will write 1 is a ect

      var values = columnXRange.getValues();//takes all shit from above to use as range

      if (!values[0][0]) {  // If cell isn't empty
         values[0][0] = new Date();//set date to the vaules in the range
      }

      columnXRange.setValues(values); //use the values set above and write them in 
    }
  }  
}

..这应该可以解决您的问题。当前脚本的问题在于,该脚本正在复制列v单元格的“值”,并仅将其替换为文本值。这将您要捕获的范围限制为仅所需的单元格,消除了for()循环,并完全解决了问题。