【问题标题】:Google Sheets Script - Cannot read property 1.0?Google 表格脚本 - 无法读取属性 1.0?
【发布时间】:2017-02-23 05:15:30
【问题描述】:

我正在尝试通过脚本输入数据,以便它找到第一个空行,并在该行中找到第一个空列并将数据输入该列。对于每一行,将有几列插入信息,并且在单独的请求中完成,我意识到这是我必须解决的另一个问题,但我还没有解决。

var answer = e.parameter["value"]
  var doc = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key"));
  var sheet = doc.getSheetByName(e.parameter["sheet"]);
  var row = sheet.getLastRow();
  var column = sheet.getLastColumn()
  var range = sheet.getRange(row, 1, 1, column);
  var data = range.getValues();

  for(var i = 1; i <= column; i++){
    if (data[1][i] == "" || data[1][i] == " "){
      sheet.getRange(1, i).setValue(answer);
      break;
    }
  }

运行时出现此错误:"message":"Cannot read property \"1.0\" from undefined.","name":"TypeError","fileName":"Code (Database宏)","lineNumber":107,"stack":"\tat 代码(数据库宏):107 (doPost

编辑代码:

for(var i = 1; i <= column; i++){
    if (data[i] == ""){
      sheet.getRange(row, i).setValue(answer);
      break;
    }
  }

【问题讨论】:

  • 据我所知@Austin,您首先需要找到一种“找到第一个空行”的方法,然后转到该行中的每个单元格(列)对吗?
  • @oserek 是的!你明白了。
  • javascript 数组从零开始,而不是 1。使用应用程序脚本调试器查找错误。
  • 第 107 行,可能有用添加
  • 您只是在代码的最后一行添加数据。但是,从您的问题来看,您似乎想找到一个空行?这是否意味着整行为空或一行有空列?

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


【解决方案1】:

我正在与您共享工作表,您可以在其中查看我如何在 A1:A10 范围内找到第一个空行(单元格值)

https://docs.google.com/spreadsheets/d/12w3Xi2CsOQ7u0i6gB5T7SWhG5_Kkv_04UJOp2ouNpF0/edit?usp=sharing

function myFunction() {
  var aa = SpreadsheetApp.getActiveSheet().getRange("A1:A10").getValues();
  var ui = SpreadsheetApp.getUi();
  var ix = null;
  for( var i = 0 ; i < aa.length; i++){
    if( aa[ i ] == "" ) { ix = i; break; }
  }
  ui.alert( "first empty row is: A" + (ix+1) ); 
}

嗯,干杯

【讨论】:

    【解决方案2】:

    你的问题在这里:

    如@ZigMandel 所述,Javascript 数组索引从 0 而不是 1 开始,因此修改以下代码:

    for(var i = 1; i <= column; i++){
        if (data[1][i] == "" || data[1][i] == " "){ // This i believe is your line 107
          sheet.getRange(1, i).setValue(answer);
          break;
        }
      }
    

    到这里:

    for(var i = 0; i < column; i++){
            if (data[0][i] == "" || data[0][i] == " "){
              sheet.getRange(1, i).setValue(answer);
              break;
            }
          }
    

    你得到的错误很可能是因为这个语句 data[1][i]。由于数组索引从 0 开始,并且您从这段代码中得到了一行:

     var range = sheet.getRange(row, 1, 1, column);
      var data = range.getValues();
    

    没有索引 1,因此 data[1] 未定义。

    【讨论】:

    • 谢谢你。我确实稍微编辑了我的代码以更好地匹配我正在尝试做的事情,但我遇到了一个不同的问题。
    • 我用我的新代码编辑了我的原始问题。目前它没有记录 data[i] 是空白的,即使我打印出来确认它,我得到的是 [["", "", ""]]。所以它是空白的,但它不能确定它是空白的。
    • 数据是二维数组,因此您得到了上述结果。在像 data =[[1,2],[3,4]] 这样的二维数组中,data[0] = [1,2] 这是另一个数组,因此 != ""。
    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多