gpt4 book ai didi

javascript - 在 GAS 中,通过循环读取电子表格中多张数据的 col

转载 作者:行者123 更新时间:2023-11-30 09:32:21 25 4
gpt4 key购买 nike

我正在尝试跨电子表格中的多个工作表从 GAS(Google Apps 脚本)中读取数据,但我无法弄清楚如何执行此操作。

如何设置电子表格的背景

电子表格设置有多个工作表(选项卡),每个工作表都有一个唯一的名称。我只关心在我的代码运行时确定的工作表子集,这些工作表的名称存储在一个数组中。在这个例子中,我们假设我关心的 3 张表的名称存储在一个数组中:

sheetNames = ["Sheet1", "Sheet3", "Sheet7"]

所有工作表都具有相同的列标题和不同的行数。第一列 A 列包含唯一 ID,其余列包含其余数据。

例如,Sheet1 看起来像这样: enter image description here

我的问题

我的目标:我正在尝试从 Sheet1、Sheet3 和 Sheet7 中的每一个中读取 A 列中的一列 ID,并存储该数据以备后用。

这是我目前的代码:

// For this case, assume sheetNames = ["Sheet1", "Sheet3", and "Sheet7"]

for (var i=0; i<sheetNames.length; i++) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetNames[i]);
var values = sheet.getRange(2, 1, sheet.getLastRow()-1, 1).getValues();
}

我目前所遇到的问题(当然 :) )是变量 values 在循环中的每次迭代都会被覆盖。但我有点卡住了。

我想做的是让 values[0] 包含一个包含 Sheet1 中 A 列的数组,values[1]包含一个数组,其中包含 Sheet3 中的 A 列等。

这里的一个复杂因素是 getValues() 返回一个二维数组,即使我只提取一行数据(根据 documentation )。我不确定我能否以某种方式创建 3D 阵列,即使我可以,这是否是最佳解决方案?

提前感谢您的任何帮助/想法/想法!

最佳答案

当您从列中获取值时,最好使用平面数组 [1,2,3] 而不是 [[1], [2], [3 ]] 用于将来的操作。这种扁平化可以通过

实现
values.map(function (row) {return row[0]; });

至于存储来自多个工作表的值,使用键值对是很自然的。也就是说,values 将是一个字典,其键是工作表名称,对应的值是 A 列中的数据数组。

var sheetNames = ["Sheet1", "Sheet3", and "Sheet7"]
var ss = SpreadsheetApp.getActiveSpreadsheet();
var values = {};
for (var i = 0; i < sheetNames.length; i++) {
var sheet = ss.getSheetByName(sheetNames[i]);
values[sheetNames[i]] = sheet.getRange(2, 1, sheet.getLastRow()-1, 1)
.getValues()
.map(function (row) {
return row[0];
});
}

这些以后可以像 values["Sheet1"][3] 一样访问。

关于javascript - 在 GAS 中,通过循环读取电子表格中多张数据的 col,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523350/

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