gpt4 book ai didi

google-apps-script - 使用 setColumnFilterCriteria 后如何从 Filter 中获取过滤后的值?

转载 作者:行者123 更新时间:2023-12-05 03:58:48 58 4
gpt4 key购买 nike

我在 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

最佳答案

  • 您想从电子表格的过滤表中检索值。
  • 您想使用 Google Apps 脚本实现这一目标。

如果我的理解是正确的,这个答案怎么样?

问题和解决方法:

不幸的是,无法使用 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/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com