Google apps script 如何使用google应用程序脚本编辑器过滤列中的数据
我面临一些与使用谷歌应用程序脚本编辑器过滤列中数据相关的问题 我可以使用谷歌应用程序脚本在列中设置一个过滤器,正如你在上面的屏幕截图中看到的那样。但问题是当我试图获取过滤后的数据时。它返回一些数字序列,而不是实际数据,如下所示:Google apps script 如何使用google应用程序脚本编辑器过滤列中的数据,google-apps-script,google-sheets,google-sheets-api,Google Apps Script,Google Sheets,Google Sheets Api,我面临一些与使用谷歌应用程序脚本编辑器过滤列中数据相关的问题 我可以使用谷歌应用程序脚本在列中设置一个过滤器,正如你在上面的屏幕截图中看到的那样。但问题是当我试图获取过滤后的数据时。它返回一些数字序列,而不是实际数据,如下所示: [20-03-09 18:19:48:395 IST] [1,2,4,5,6,8,9,10,11,12,13,14,15,19,20,21,22,23,24,26,27,28,29,30] 设置过滤器: function setFilter() { var s
[20-03-09 18:19:48:395 IST] [1,2,4,5,6,8,9,10,11,12,13,14,15,19,20,21,22,23,24,26,27,28,29,30]
设置过滤器:
function setFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filterSettings = {};
// The range of data on which you want to apply the filter.
// optional arguments: startRowIndex, startColumnIndex, endRowIndex, endColumnIndex
filterSettings.range = {
sheetId: ss.getActiveSheet().getSheetId()
};
// Criteria for showing/hiding rows in a filter
// https://developers.google.com/sheets/api/reference/rest/v4/FilterCriteria
filterSettings.criteria = {};
var columnIndex = 2;
filterSettings['criteria'][columnIndex] = {
'hiddenValues': ["England", "France"]
};
var request = {
"setBasicFilter": {
"filter": filterSettings
}
};
Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}
function getFilteredRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheetId = ss.getActiveSheet().getSheetId();
let data = getIndexesOfFilteredRows(ssId,sheetId);
Logger.log(JSON.stringify(data));
}
function getIndexesOfFilteredRows(ssId, sheetId) {
var hiddenRows = [];
// limit what's returned from the API
var fields = "sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)";
var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets;
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].properties.sheetId == sheetId) {
var data = sheets[i].data;
var rows = data[0].rowMetadata;
for (var j = 0; j < rows.length; j++) {
if (rows[j].hiddenByFilter) hiddenRows.push(j);
}
}
}
return hiddenRows;
}
获取过滤后的数据:
function setFilter() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var filterSettings = {};
// The range of data on which you want to apply the filter.
// optional arguments: startRowIndex, startColumnIndex, endRowIndex, endColumnIndex
filterSettings.range = {
sheetId: ss.getActiveSheet().getSheetId()
};
// Criteria for showing/hiding rows in a filter
// https://developers.google.com/sheets/api/reference/rest/v4/FilterCriteria
filterSettings.criteria = {};
var columnIndex = 2;
filterSettings['criteria'][columnIndex] = {
'hiddenValues': ["England", "France"]
};
var request = {
"setBasicFilter": {
"filter": filterSettings
}
};
Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}
function getFilteredRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssId = ss.getId();
var sheetId = ss.getActiveSheet().getSheetId();
let data = getIndexesOfFilteredRows(ssId,sheetId);
Logger.log(JSON.stringify(data));
}
function getIndexesOfFilteredRows(ssId, sheetId) {
var hiddenRows = [];
// limit what's returned from the API
var fields = "sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)";
var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets;
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].properties.sheetId == sheetId) {
var data = sheets[i].data;
var rows = data[0].rowMetadata;
for (var j = 0; j < rows.length; j++) {
if (rows[j].hiddenByFilter) hiddenRows.push(j);
}
}
}
return hiddenRows;
}
函数getFilteredRows(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var ssId=ss.getId();
var sheetId=ss.getActiveSheet().getSheetId();
let data=getIndexOfFilteredRows(ssId,sheetId);
Logger.log(JSON.stringify(data));
}
函数GetIndexOfFilteredRows(ssId,sheetId){
var hiddenRows=[];
//限制从API返回的内容
var fields=“表(数据(行元数据(hiddenByFilter)),属性/sheetId)”;
var sheets=sheets.Spreadsheets.get(ssId,{fields:fields}).sheets;
对于(变量i=0;i请帮我做这个
- 在您的情况下,用于筛选的脚本已经起作用了。您需要用于从电子表格中的筛选表中检索值的脚本
- 您希望通过使用带有Google Apps脚本的Sheets API来实现这一点
getIndexesOfFilteredRows
的函数被修改。使用hiddenByFilter
,将隐藏行和显示行作为对象进行检索
修改脚本:
参考:
filterValues
过滤的值可以作为对象检索。在这种情况下,您的setFilter()
和修改后的getIndexesOfFilteredRows()
的结果是相同的。但不使用基本过滤器。所以请小心这个
function myFunction() {
var filterValues = ["England", "France"]; // Please set the filter values.
var column = 3; // In this case, it's the column "C". Please set the column number.
var sheetName = "Sheet1"; // Please set the sheet name.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(sheetName);
var values = sheet.getDataRange().getValues();
var object = values.reduce(function(o, e, i) {
if (filterValues.indexOf(e[column - 1]) > -1) {
o.hiddenRows.push(i + 1);
o.hiddenRowValues.push(e);
} else {
o.shownRows.push(i + 1);
o.shownRowValues.push(e);
}
return o;
}, {hiddenRows: [], hiddenRowValues: [], shownRows: [], shownRowValues: []});
Logger.log(object)
}
- 如果只想检索过滤后的值,此脚本可能比较合适
- 在这种情况下,脚本可以在使用和不使用V8的情况下运行。但当V8启用时,环路速度将很快李>