相关疑难解决方法(0)

657
推荐指数
15
解决办法
33万
查看次数

带有基于列中值的过滤器的 Google Script GetRange 并仅选择某些列

我有一个 35 列和 300 行的数据集。我想获取仅包含第 30 列(名称)中某些值的行的范围。过滤数据的名称基于活动报告表中的报告文件单元格 B6。到目前为止,我试过这个:

var report = SpreadsheetApp.getActiveSpreadsheet();
var tsheet = report.getSheetByName("Transactions");
var areport = SpreadsheetApp.getActiveSheet();
var agent = areport.getRange('B6').getValues();

var criteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo(agent).build();
var trange = tsheet.getRange().createFilter().setColumnFilterCriteria(30, criteria); // ERROR
var tdata = trange.getValues();
Run Code Online (Sandbox Code Playgroud)

我收到错误异常:参数 () 与 SpreadsheetApp.Sheet.getRange 的方法签名不匹配。

第二部分,我只想得到几列,5,6,7,13,15。我不能用电子表格应用程序创建另一个过滤器,所以是制作数组并从中过滤出所需数据的唯一方法那里?我只是想提前考虑并减少计算量。

javascript google-sheets google-apps-script

2
推荐指数
1
解决办法
1631
查看次数

范围方法 getValues() 返回和 setValues() 接受什么?

我想从我的工作表中获取一个范围。按照最佳实践中的建议,我试图获取一个数组并对其进行操作,但我很困惑:

const ss = Spreadsheet.getActive(),
  sh = ss.getSheetByName("Sheet1"),
  rg = sh.getRange("A1:C1"),//has 1,2,3
  values = rg.getValues();
console.log(values);
Run Code Online (Sandbox Code Playgroud)

日志显示

[[1,2,3]]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我得到了所有三个元素。但是,当我记录数组(array.length)的长度时,它只是 1(而不是 3)。当我使用.indexOfor测试元素是否存在时.includes,它显示 -1 或false

const ss = Spreadsheet.getActive(),
  sh = ss.getSheetByName("Sheet1"),
  rg = sh.getRange("A1:C1"),//has 1,2,3
  values = rg.getValues();
console.log(values);
Run Code Online (Sandbox Code Playgroud)

为什么?

我有同样的问题setValues()

rg.setValues([1,2,3]);//throws error
Run Code Online (Sandbox Code Playgroud)

错误是

“参数 (number[]) 与 SpreadsheetApp.Range.setValues 的方法签名不匹配。”

我的具体问题是:究竟getValues() 返回什么?它是一种特殊的数组吗?

arrays multidimensional-array google-sheets google-apps-script

1
推荐指数
1
解决办法
1630
查看次数