首页 > 解决方案 > 搜索列以查看是否存在新数据并从那里继续

问题描述

Apps 脚本新手,想编写一个简单的函数来试水。不幸的是,我遇到了一些困难。我希望该函数检查 E 列并查看是否存在现有数据。如果是,我希望它在旁边的列中添加一个公式。否则什么都不做并检查下一行。运行下面列出的代码时出现错误:

例外:范围的起始行太小。

有人可以指出我到底做错了什么吗?

function dateToColumn() {

  var ss = SpreadsheetApp.openById(dbGoogleSheet);
  Logger.log('Google Sheet database used' + ' ' + ss.getName());
  var dataSheet = ss.getSheetByName('Form Responses 1')
  Logger.log(dataSheet.getName());
  var rangeData = dataSheet.getDataRange();
  var lastColumn = rangeData.getLastColumn();
  var lastRow = rangeData.getLastRow();
  var searchRange = dataSheet.getRange(2, 5, lastRow - 1, lastColumn - 1);


  if (dataSheet.getName() === "Form Responses 1") {
    var rangeValues = searchRange.getValues();
    //Logger.log(rangeValues)
    for (i = 0; i < lastColumn - 1; i++) {
      for (j = 0; j < lastRow - 1; j++) {
        // Logger.log(dataSheet.getRange(j,i));
        if (rangeValues[j][i] !== null) {
          dataSheet.getRange(j, i++).setFormula(`=YEAR(` + j, i + `)`);
        }
      }
    }
  } else {
    return;
  }
};

标签: google-apps-scriptgoogle-sheets

解决方案


除了另一个答案中提到的点之外,您还应该注意i索引。

此外,您将错误的参数传递给该setFormula方法。因此,根据您想如何使用公式YEAR,您应该相应地重新格式化它。

因此,您应该更改此行:

dataSheet.getRange(j, i++).setFormula(`=YEAR(` + j, i + `)`);

至:

dataSheet.getRange(j+1, i+2).setFormula('=YEAR(' + (j, i) + ')');

参考


推荐阅读