我有一个 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。我不能用电子表格应用程序创建另一个过滤器,所以是制作数组并从中过滤出所需数据的唯一方法那里?我只是想提前考虑并减少计算量。
我想从我的工作表中获取一个范围。按照最佳实践中的建议,我试图获取一个数组并对其进行操作,但我很困惑:
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