gpt4 book ai didi

javascript - 谷歌表格脚本: Getting values from each range in a rangelist in the same variable

转载 作者:行者123 更新时间:2023-12-01 00:46:21 25 4
gpt4 key购买 nike

我试图从工作表的两个不同部分获取范围,并将它们的值粘贴到另一张工作表上。我使用的方法适用于第一个范围,但不适用于下一个范围。我需要两个范围内的值保留在同一个变量中,因为我需要稍后对其进行过滤。

var fromsh = SpreadsheetApp.openById(id).getSheetByName("Sheet1");
var fromval = fromsh.getRangeList(['A3170:O', 'Y3170:Y']).getRanges()
var values = [];
for(var i = 0; i < fromval.length; i++){
values = [].concat(values, fromval[i].getValues());
}
tosh = SpreadsheetApp.openById(id).getSheetByName("Sheet1");
tosh.getRange(1, 1, values.length, values[0].length).setValues(values);

显示的错误是:数据中的列数与范围中的列数不匹配。数据有 1,但范围有 15。

最佳答案

  • 您想要输入 A3170:OY3170:Y 范围内的值。
  • 您希望使用 Google Apps 脚本来实现此目的。

如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。

问题:

在您的脚本中,A3170:OY3170:Y 之间的列数不同。这样,tosh.getRange(1, 1,values.length,values[0].length).setValues(values)会发生错误。

解决方案:

为了避免上述问题,进行以下修改如何?

模式 1:

在此模式中,您的脚本是使用电子表格服务修改的。请修改如下。

从:
var values = [];
for(var i = 0; i < fromval.length; i++){
values = [].concat(values, fromval[i].getValues());
}
到:
var obj = fromval.reduce(function(o, r) {
var v = r.getValues();
if (o.cols < v[0].length) o.cols = v[0].length;
o.values = [].concat(o.values, v);
return o;
}, {cols: 0, values: []});
var values = obj.values.map(function(e) {
return e.length == obj.cols ? e : e = [].concat(e, Array.apply(null, new Array(obj.cols - e.length)).map(function(e) {return ""}));
});
  • 获取最大列数,并通过添加""调整数组每个元素的长度。然后,将值放入电子表格中。

模式 2:

在此模式中,您的脚本是使用 Sheets API 修改的。请修改如下。在运行此脚本之前,请启用 Sheets API Advanced Google services .

从:
tosh = SpreadsheetApp.openById(id).getSheetByName("Sheet1");
tosh.getRange(1, 1, values.length, values[0].length).setValues(values);
到:
Sheets.Spreadsheets.Values.update({values: values}, id, "Sheet1!A1", {valueInputOption: "USER_ENTERED"});
  • 使用 Sheets API 时,可以在不调整每个元素长度的情况下输入值。
  • 使用时,请设置id

引用文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

添加:

来自TheMaster's suggestion ,我又添加了一个示例脚本。在此示例脚本中,

A3170:OY3170:Y 范围内的值按列方向相加。例如,A3170:O3170 和 Y3170

针对这种情况,请进行如下修改。

模式 3:

在此模式中,您的脚本是使用电子表格服务修改的。请修改如下。

从:
values = [].concat(values, fromval[i].getValues());
到:
var temp = fromval[i].getValues();
values = i === 0 ? temp : values.map(function(e, i) {return [].concat(e, temp[i])});

关于javascript - 谷歌表格脚本: Getting values from each range in a rangelist in the same variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57323180/

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