作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 appscript 中使用一些过滤器时遇到了麻烦。我可以看到电子表格正在过滤,但我没有看到任何更改。
你能帮忙吗?
谢谢
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("xxxx");
var values = sheet.getDataRange().getValues();
Logger.log("VALUES "+values.length);
var newCriteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('51').build();
var range = sheet.getFilter().setColumnFilterCriteria(22, newCriteria).getRange(); //The 1-indexed position of the column.
values = range.getValues();
Logger.log("VALUES "+values.length);
记录结果:
19-08-28 19:27:33:272 CEST] VALUES 1379
[19-08-28 19:27:39:748 CEST] VALUES 1379
最佳答案
如果我的理解是正确的,这个答案怎么样?
不幸的是,无法使用 getValues()
从过滤后的工作表中检索值。 TheMaster`s comment已经提到了这一点.作为解决方法,我想提出以下 2 种模式。
发布电子表格后,可以看到过滤后的表格。在此模式中,使用 this,并使用查询语言检索值。不过别担心。在此脚本中,使用了访问 token 。因此可以直接检索过滤后的工作表,而无需发布电子表格。我认为这是简单的方法。
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
var sheet = ss.getSheetByName("xxxx"); // Modified
var values = sheet.getDataRange().getValues();
Logger.log("VALUES "+values.length);
var newCriteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('51').build();
var range = sheet.getFilter().setColumnFilterCriteria(22, newCriteria).getRange(); //The 1-indexed position of the column.
// values = range.getValues();
// I added below script.
var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/gviz/tq?tqx=out:csv&gid=" + sheet.getSheetId() + "&access_token=" + ScriptApp.getOAuthToken();
var res = UrlFetchApp.fetch(url);
var values = Utilities.parseCsv(res.getContentText());
Logger.log("VALUES "+values.length);
在此模式中,使用了 Sheets API。在使用此脚本之前,please enable Sheets API at Advanced Google services .
var ss = SpreadsheetApp.getActiveSpreadsheet(); // Added
var sheet = ss.getSheetByName("xxxx"); // Modified
var values = sheet.getDataRange().getValues();
Logger.log("VALUES "+values.length);
var newCriteria = SpreadsheetApp.newFilterCriteria().whenTextEqualTo('51').build();
var range = sheet.getFilter().setColumnFilterCriteria(22, newCriteria).getRange(); //The 1-indexed position of the column.
// values = range.getValues();
// I added below script.
var res = Sheets.Spreadsheets.get(ss.getId(), {
ranges: ["xxxx"], // <--- Please set the sheet name.
fields: "sheets/data"
});
var values = res.sheets[0].data[0].rowMetadata.reduce(function(ar, e, i) {
if (!e.hiddenByFilter && res.sheets[0].data[0].rowData[i]) {
ar.push(
res.sheets[0].data[0].rowData[i].values.map(function(col) {
return col.userEnteredValue[Object.keys(col.userEnteredValue)[0]];
})
);
}
return ar;
}, []);
Logger.log("VALUES "+values.length);
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
关于google-apps-script - 使用 setColumnFilterCriteria 后如何从 Filter 中获取过滤后的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697431/
我在 appscript 中使用一些过滤器时遇到了麻烦。我可以看到电子表格正在过滤,但我没有看到任何更改。 你能帮忙吗? 谢谢 var sheet = SpreadsheetApp.getAc
这个问题是另一个问题的延伸。 Apply basic filter to multiple values in a spreadsheet column 我遇到了一个错误,特别是 Service er
我是一名优秀的程序员,十分优秀!