在电子表格中按列值搜索行的正确方法是什么 API
What is proper way of searching a row by column value in spreadsheets API
我正在尝试在 spreadsheet(Google 工作表)API 中按列值搜索
Google 文档有 API 可用于查找和替换,但没有 API 可用于 find/search。
一些方法我已经尝试过在传播中实现按值搜索sheet。
Google 可视化 API 查询语言:此方法返回匹配值的行。
部分问题回复:
a) 不返回行号(无索引)
b) 搜索区分大小写
是否可以在该方法的结果中获取行号?
设置列
=ROW(INDIRECT(ADDRESS(MATCH("search_string",B:B,0),1)))
得到行号例如:2
然后通过按范围获取值获取行:
https://sheets.googleapis.com/v4/spreadsheets/1Y65ZA5mhyImLL00yGR3lqwtbm6MgGLV0nV014fRXhts/values/A2:Z2
这不是正确的方法,我必须使用公式创建一个单元格,然后在该单元格中按值查找行,并在搜索完成后清除销售。
*This approach returns only one row.
DeveloperMetadataLookup:我不知道如何使用它
我在 sheet 上创建了元数据
元数据密钥:key1
元数据值:值 1
搜索 spreadsheets.values.batchGetByDataFilter
using dataFilter:DeveloperMetadataLookup{"metadataKey":"key1","metadataValue":"value1"}
这将返回 sheet 中的所有行我不知道如何使用此方法查找特定行。
Google Apps Text Finder:我不知道这是否可以免费使用 spreadsheet API.
基本过滤器:我读到过这个但不知道如何使用它进行搜索。
一些相同主题的旧问题建议获取所有行并循环它们以按值获取行。
示例:这会挂起我的服务器,我不想实现这个循环。
function find(value, range) {
var data = range.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return range.getCell(i + 1, j + 1);
}
}
}
return null;
}
结论:
任何人都可以帮助我找到在 sheet 中按列值搜索行的正确方法吗?
是否可以使用(DeveloperMetadataLookup 或 Basic Filter)按列值搜索行
如果是,请建议我正确的使用方法。
Google 可视化 API 查询语言:是否可以获取行号?
这是一个例子sheet
Column-> A, B, C
Row1->B-15, planY, 50
Row2->B-18, planZ, 80
Row3->B-19, planC, 70
Row4->B-21, planZ, 90
我的需求搜索column:B = value:planZ | (B=计划Z)
结果应该与此类似:
Row:{
"2":["B-18","planZ","80"],
"4":["B-21","planZ","90"]
}
测试了 This thread 函数并进行了一些修改以在电子表格中进行搜索,我得到了行号和行值(该行的所有单元格)。
function doGet(e = {
"parameter": {
"value": "planc",
"spreadsheetId": "1Y65ZA5mhyImLL00yGR3lqwtbm6MgGLV0nV014fRXhts",
"column": "B",
"headerStatus": true
}
}) {
var findText = e.parameter.value;
var spreadsheetId = e.parameter.spreadsheetId;
var column = e.parameter.column;
var ss = SpreadsheetApp.openById(spreadsheetId);
var ranges = ss.createTextFinder(findText).findAll();
var headerStatus = e.parameter.headerStatus;
if (headerStatus == true || headerStatus == "true") {
var header = ss.getRange("A1:Z1").getValues()[0];
}
var res = ranges.map(r => ({
row: r.getRow(),
value: r.getSheet().getRange(`A${r.getRow()}:Z${r.getRow()}`).getValues()[0]
}));
var result = {};
var allColumn = {
"A": 0,
"B": 1,
"C": 2,
"D": 3,
"E": 4,
"F": 5,
"G": 6,
"H": 7,
"I": 8,
"J": 9,
"K": 10,
"L": 11,
"M": 12,
"N": 13,
"O": 14,
"P": 15,
"Q": 16,
"R": 17,
"S": 18,
"T": 19,
"U": 20,
"V": 21,
"W": 22,
"X": 23,
"Y": 24,
"Z": 25
};
var columnIndex = allColumn[column];
for (var key in res) {
var getRow = res[key]["row"];
var getValue = res[key]["value"];
if (getValue[columnIndex].toLowerCase() == findText.toLowerCase()) {
if (headerStatus == true || headerStatus == "true") {
var headerValueObj = {};
for (var i = 0; i < header.length; i++) {
if (header[i] !== "") {
var headerName = header[i];
headerValueObj[headerName] = getValue[i];
}
}
result[getRow] = headerValueObj;
} else {
result[getRow] = getValue;
}
}
}
return result;
}
输出结果
"result": {
"4": {
"Price": 20,
"heading4": "",
"Id": "B-16",
"Plan": "PlanC"
},
"7": {
"Price": 8,
"heading4": "",
"Id": "B-24",
"Plan": "PlanC"
}
}
我正在尝试在 spreadsheet(Google 工作表)API 中按列值搜索 Google 文档有 API 可用于查找和替换,但没有 API 可用于 find/search。
一些方法我已经尝试过在传播中实现按值搜索sheet。
Google 可视化 API 查询语言:此方法返回匹配值的行。
部分问题回复:
a) 不返回行号(无索引)
b) 搜索区分大小写
是否可以在该方法的结果中获取行号?
设置列
=ROW(INDIRECT(ADDRESS(MATCH("search_string",B:B,0),1)))
得到行号例如:2
然后通过按范围获取值获取行: https://sheets.googleapis.com/v4/spreadsheets/1Y65ZA5mhyImLL00yGR3lqwtbm6MgGLV0nV014fRXhts/values/A2:Z2
这不是正确的方法,我必须使用公式创建一个单元格,然后在该单元格中按值查找行,并在搜索完成后清除销售。
*This approach returns only one row.
DeveloperMetadataLookup:我不知道如何使用它 我在 sheet 上创建了元数据 元数据密钥:key1 元数据值:值 1
搜索 spreadsheets.values.batchGetByDataFilter
using dataFilter:DeveloperMetadataLookup{"metadataKey":"key1","metadataValue":"value1"}
这将返回 sheet 中的所有行我不知道如何使用此方法查找特定行。
Google Apps Text Finder:我不知道这是否可以免费使用 spreadsheet API.
基本过滤器:我读到过这个但不知道如何使用它进行搜索。
一些相同主题的旧问题建议获取所有行并循环它们以按值获取行。
示例:这会挂起我的服务器,我不想实现这个循环。
function find(value, range) {
var data = range.getValues();
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
if (data[i][j] == value) {
return range.getCell(i + 1, j + 1);
}
}
}
return null;
}
结论:
任何人都可以帮助我找到在 sheet 中按列值搜索行的正确方法吗?
是否可以使用(DeveloperMetadataLookup 或 Basic Filter)按列值搜索行 如果是,请建议我正确的使用方法。
Google 可视化 API 查询语言:是否可以获取行号?
这是一个例子sheet
Column-> A, B, C
Row1->B-15, planY, 50
Row2->B-18, planZ, 80
Row3->B-19, planC, 70
Row4->B-21, planZ, 90
我的需求搜索column:B = value:planZ | (B=计划Z)
结果应该与此类似:
Row:{
"2":["B-18","planZ","80"],
"4":["B-21","planZ","90"]
}
测试了 This thread 函数并进行了一些修改以在电子表格中进行搜索,我得到了行号和行值(该行的所有单元格)。
function doGet(e = {
"parameter": {
"value": "planc",
"spreadsheetId": "1Y65ZA5mhyImLL00yGR3lqwtbm6MgGLV0nV014fRXhts",
"column": "B",
"headerStatus": true
}
}) {
var findText = e.parameter.value;
var spreadsheetId = e.parameter.spreadsheetId;
var column = e.parameter.column;
var ss = SpreadsheetApp.openById(spreadsheetId);
var ranges = ss.createTextFinder(findText).findAll();
var headerStatus = e.parameter.headerStatus;
if (headerStatus == true || headerStatus == "true") {
var header = ss.getRange("A1:Z1").getValues()[0];
}
var res = ranges.map(r => ({
row: r.getRow(),
value: r.getSheet().getRange(`A${r.getRow()}:Z${r.getRow()}`).getValues()[0]
}));
var result = {};
var allColumn = {
"A": 0,
"B": 1,
"C": 2,
"D": 3,
"E": 4,
"F": 5,
"G": 6,
"H": 7,
"I": 8,
"J": 9,
"K": 10,
"L": 11,
"M": 12,
"N": 13,
"O": 14,
"P": 15,
"Q": 16,
"R": 17,
"S": 18,
"T": 19,
"U": 20,
"V": 21,
"W": 22,
"X": 23,
"Y": 24,
"Z": 25
};
var columnIndex = allColumn[column];
for (var key in res) {
var getRow = res[key]["row"];
var getValue = res[key]["value"];
if (getValue[columnIndex].toLowerCase() == findText.toLowerCase()) {
if (headerStatus == true || headerStatus == "true") {
var headerValueObj = {};
for (var i = 0; i < header.length; i++) {
if (header[i] !== "") {
var headerName = header[i];
headerValueObj[headerName] = getValue[i];
}
}
result[getRow] = headerValueObj;
} else {
result[getRow] = getValue;
}
}
}
return result;
}
输出结果
"result": {
"4": {
"Price": 20,
"heading4": "",
"Id": "B-16",
"Plan": "PlanC"
},
"7": {
"Price": 8,
"heading4": "",
"Id": "B-24",
"Plan": "PlanC"
}
}