Mik*_* B. 2 javascript google-sheets google-apps-script
我有一个 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。我不能用电子表格应用程序创建另一个过滤器,所以是制作数组并从中过滤出所需数据的唯一方法那里?我只是想提前考虑并减少计算量。
尝试使用filter():
var report = SpreadsheetApp.getActiveSpreadsheet();
var tsheet = report.getSheetByName("Transactions");
var areport = SpreadsheetApp.getActiveSheet();
var agent = areport.getRange('B6').getValue();
var data = tsheet.getRange('A1:AI300').getValues();
var tdata = data.filter(function (row) {
return row[29] == agent && row[5] == 'Closed' ; // starts from 0, column A is 0.
});
Run Code Online (Sandbox Code Playgroud)
要从中选择特定列,tdata请执行以下操作:
var cr_data = getCols(tdata,[5,6,7, 13, 15]);
Run Code Online (Sandbox Code Playgroud)
其中getCols()定义如下:
function getCols(arr,cols) {
return arr.map(row =>
row.filter((_,i) => cols.includes(++i)))
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以cr_data像这样复制到特定的地方/工作表:
sheet.getRange(1,1,cr_data.length,cr_data[0].length).setValues(cr_data);
Run Code Online (Sandbox Code Playgroud)
关于您问题的第二部分,我想将您重定向到这篇文章:
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |