如何解决具有基于列中值的过滤器的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();
我收到错误异常:参数()与SpreadsheetApp.Sheet.getRange的方法签名不匹配。
第二部分,我只想获取5、6、7、13、15列。我无法使用Spreadsheet应用创建另一个过滤器,因此这是制作数组并过滤出唯一的方法从那里需要数据?我只是想提前考虑并减少计算量。
解决方法
尝试使用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.
});
要从tdata
中选择特定的列,请执行以下操作:
var cr_data = getCols(tdata,[5,6,7,13,15]);
其中getCols()的定义如下:
function getCols(arr,cols) {
return arr.map(row =>
row.filter((_,i) => cols.includes(++i)))
}
最后,您可以像这样将cr_data
复制到特定的位置/工作表:
sheet.getRange(1,1,cr_data.length,cr_data[0].length).setValues(cr_data);
关于您问题的第二部分,我想将您重定向到这篇文章:
Best method to extract selected columns from 2d array in apps script
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。