我如何从AppScript中的某些列提取数据?



我试图在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)
}

当这个修改后的脚本运行时,头值为IDAF的列的值。

参考:

  • map ()

补充道:

从你下面的回复和你更新的问题,

嗨,Tanaike,我一定会使用你所说的映射值的方法。但首先我需要从gsheet正确读取数据。请参阅我的编辑,并提出错误。我的代码不是放在谷歌电子表格本身,但在AppsScript的一个独立文件

我尝试了这段代码,但它绝对是不完整的。它会引发以下错误:

TypeError: Cannot read property 'getDataRange' of undefined

如果您试图通过脚本编辑器直接执行getColumnId(sheet, namecol)函数,则会发生这样的错误,因为sheet未定义。我想这可能就是你现在问题的原因。从这种情况来看,我认为您可能希望使用sheet,IDColAFCol作为全局变量。如果我的理解是正确的,那么下面的样例脚本呢?

示例脚本:

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运行时,可以在日志中看到值。

最新更新