gpt4 book ai didi

javascript - Google 表格脚本 - "Cannot read property of undefined"(如果不是)

转载 作者:行者123 更新时间:2023-12-03 07:04:56 28 4
gpt4 key购买 nike

我正在尝试解构 Google-Team's script从 AdWords 获取报告并将其写入 Google 表格电子表格。我正在应用程序编辑器中测试它并收到“无法读取未定义...”错误。

我的项目中目前有两个 .gs 文件:

<强>1。函数定义(“class”),empty_row.gs 文件:

function SpreadsheetAccess(spreadsheetUrl, sheetName) {
this.spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
this.sheet = spreadsheet.getSheetByName(sheetName);

this.findEmptyRow = function(minRow, column) {
var values = this.sheet.getRange(minRow, column, this.sheet.getMaxRows(), 1).getValues();

for (var i = 0; i < values.length; i++) {
if(!values[i][0]) {
return i + minRow;
}
}
return -1;
};

this.addRows = function(howMany){
this.sheet.insertRowsAfter(this.sheet.getMaxRows(), howMany);
};

this.writeRows = function(){
this.sheet.getRange(startRow, startColumn, rows.length, rows[0].length).setValue(rows);
};
}

<强>2。和一个 main.gs 文件,我在其中实例化对象:

var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/someurl/edit#gid=1540200210';
var sheetName = 'baba';

function main() {
var object = SpreadsheetAccess(spreadsheetUrl, sheetName);
var emptyRow = object.findEmptyRow(1, 1);

Logger.log("The empty row is: %s", emptyRow);
}

当我运行 main{} 时,我得到以下信息:

TypeError: Cannot call method "findEmptyRow" of undefined. (line 6, file "main")

为什么我的对象未定义?我已经定义:

  • 电子表格网址
  • 工作表名称
  • 我已将这些传递给我的函数调用
  • 最后函数在同一个项目的单独文件中定义

什么给了?谢谢!

最佳答案

您不应该尝试使用 this 来修改不属于您的对象。 。特别是在 Google Apps 脚本中。据我所知 this实际上指的是包含 Apps 脚本本身的所有服务代码的对象。

创建您自己的对象并传递这些对象,而不是在全局范围内更改对象,虽然从技术上讲它可以将所有内容填充到该对象中并引用它,但不鼓励这样做。

我的推理是错误的。我发布的问题仍然存在。

问题:

object未定义,因为您没有从 SpreadsheetAccess() 返回值。没有定义任何内容,因为没有返回任何内容。

解决方案1

这是您的代码,有两处更改。更新 SpreadsheetAccess 函数,并更改 spreadsheet.getSheetByName(sheetName);this.spreadsheet.getSheetByName(sheetName);

var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/someurl/edit#gid=1540200210';
var sheetName = 'baba';

function main() {
var object = new SpreadsheetAccess(spreadsheetUrl, sheetName);
var emptyRow = object.findEmptyRow(1, 1);

Logger.log("The empty row is: %s", emptyRow);
}

function SpreadsheetAccess(spreadsheetUrl, sheetName) {
this.spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
this.sheet = this.spreadsheet.getSheetByName(sheetName);

this.findEmptyRow = function(minRow, column) {
var values = this.sheet.getRange(minRow, column, this.sheet.getMaxRows(), 1).getValues();

for (var i = 0; i < values.length; i++) {
if(!values[i][0]) {
return i + minRow;
}
}
return -1;
};

this.addRows = function(howMany){
this.sheet.insertRowsAfter(this.sheet.getMaxRows(), howMany);
};

this.writeRows = function(){
this.sheet.getRange(startRow, startColumn, rows.length, rows[0].length).setValue(rows);
};
}

解决方案2这是我修改后的代码,该代码有效,我已经使用自己的电子表格对其进行了测试:

var spreadsheetUrl = 'https://docs.google.com/spreadsheets/d/someurl/edit#gid=1540200210';
var sheetName = 'baba';

function main() {
var myObject = SpreadsheetAccess(spreadsheetUrl, sheetName);
var emptyRow = myObject.findEmptyRow(1, 1);

Logger.log("The empty row is: %s", emptyRow);
}

function SpreadsheetAccess(spreadsheetUrl, sheetName) {
var myObject = {};

myObject.spreadsheet = SpreadsheetApp.openByUrl(spreadsheetUrl);
myObject.sheet = myObject.spreadsheet.getSheetByName(sheetName);

myObject.findEmptyRow = function(minRow, column) {
var values = myObject.sheet.getRange(minRow, column, myObject.sheet.getMaxRows(), 1).getValues();

for (var i = 0; i < values.length; i++) {
if(!values[i][0]) {
return i + minRow;
}
}
return -1;
};

myObject.addRows = function(howMany){
myObject.sheet.insertRowsAfter(myObject.sheet.getMaxRows(), howMany);
};

myObject.writeRows = function(startRow, startColumn, rows){
myObject.sheet.getRange(startRow, startColumn, rows.length, rows[0].length).setValue(rows);
};
return myObject;
}

关于javascript - Google 表格脚本 - "Cannot read property of undefined"(如果不是),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com