我试图在AppScript独立文件中从谷歌电子表格中获取一些数据。
我尝试了这段代码,但它绝对是不完整的。它会引发以下错误:
TypeError: Cannot read property 'getDataRange' of undefined
我的函数:
var sheet=SpreadsheetApp.openById('1n2a5iecKo7seMXcef81V_pxWSRjE4agQ9DSoROtf0').getSheets()[0]
function getColumnId(sheet, namecol) {
var data = sheet.getDataRange().getValues();
var col = data[0].findIndex((name) => name === namecol) + 1;
return col;
}
提取列数据后,我想将该数据存储在一个普通列表中:
var IDCol=getcolumnId(sheet, 'ID')
var AFCol=getcolumnId(sheet, 'AF')
可能以这种方式吗?我想做调试,但我不知道如何先处理我的函数。
我相信你的目标是这样的。
- 你想从列中检索值使用函数
getColumnId(sheet, namecol)
。
修改点:
- 您的函数名是
getColumnId
。但是你试图用getcolumnId
来调用这个函数。我认为发生错误。 var sheet=DriveApp.getFileById('1n2a5ieOMcKo7seMXcef81V_pxWSRjE4agQ9DSoROtf0').getBlob()
为Blob。在您的脚本中,var data = sheet.getDataRange().getValues()
发生错误。- 为了从列中检索值,我认为需要使用
col
的值检索值。对于这个
修改脚本:
function getColumnId(sheet, namecol) {
var data = sheet.getDataRange().getValues();
var col = data[0].findIndex((name) => name === namecol);
var transpose = data[0].map((_, c) => data.map(r => r[c])); // Here, "data" is transposed.
return transpose[col];
}
// Please run this function.
function sample() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set the sheet name.
var IDCol = getColumnId(sheet, 'ID')
var AFCol = getColumnId(sheet, 'AF')
console.log(IDCol)
console.log(AFCol)
}
当这个修改后的脚本运行时,头值为ID
和AF
的列的值。
- map ()
补充道:
从你下面的回复和你更新的问题,
嗨,Tanaike,我一定会使用你所说的映射值的方法。但首先我需要从gsheet正确读取数据。请参阅我的编辑,并提出错误。我的代码不是放在谷歌电子表格本身,但在AppsScript的一个独立文件
我尝试了这段代码,但它绝对是不完整的。它会引发以下错误:
TypeError: Cannot read property 'getDataRange' of undefined
如果您试图通过脚本编辑器直接执行getColumnId(sheet, namecol)
函数,则会发生这样的错误,因为sheet
未定义。我想这可能就是你现在问题的原因。从这种情况来看,我认为您可能希望使用sheet
,IDCol
和AFCol
作为全局变量。如果我的理解是正确的,那么下面的样例脚本呢?
示例脚本:
var sheet = SpreadsheetApp.openById('###').getSheets()[0];
function getColumnId(sheet, namecol) {
var data = sheet.getDataRange().getValues();
var col = data[0].findIndex((name) => name === namecol);
var transpose = data[0].map((_, c) => data.map(r => r[c]));
return transpose[col];
}
var IDCol = getColumnId(sheet, 'ID')
var AFCol = getColumnId(sheet, 'AF')
// Please run this function.
function myFunction() {
console.log(IDCol)
console.log(AFCol)
}
- 在此函数中,当
myFunction
运行时,可以在日志中看到值。