当前位置: 首页 > 知识库问答 >
问题:

在电子表格API中逐行搜索值的正确方法是什么

巩俊远
2023-03-14

我试图在电子表格(谷歌表格)API中逐列搜索值谷歌文档中有用于查找的API

我已经尝试过在电子表格中实现按值搜索的一些方法。

>

  • GoogleVisualizationAPI查询语言:这种方法返回匹配值的行。

    回应的一些问题:

    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:我不知道如何使用它,我使用metadataKey:key1 metadataValue:value1在工作表上创建了元数据

    通过电子表格进行搜索。价值观batchGetByDataFilter

        using dataFilter:DeveloperMetadataLookup{"metadataKey":"key1","metadataValue":"value1"}
    

    这将返回工作表中的所有行,我不知道如何使用此方法查找特定行。

    谷歌应用程序文本搜索:我不知道这是否是免费使用的电子表格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;
        }
    

    结论:

    >

  • 有人能帮我找到一种在工作表中逐行搜索值的正确方法吗?

    是否可以用(DeveloperMetadataLookup或Basic Filter)逐行搜索值如果是,请建议我正确的使用方法。

    谷歌可视化API查询语言:可以获取行数吗?

    这是一个示例表

    Column-> A, B, C
    
    Row1->B-15, planY, 50
    Row2->B-18, planZ, 80
    Row3->B-19, planC, 70
    Row4->B-21, planZ, 90
    

    我的需求搜索列:B=值:planZ |(B=planZ)

    结果应与此类似:

    Row:{
    "2":["B-18","planZ","80"],
    "4":["B-21","planZ","90"]
    }
    
    
  • 共有1个答案

    马奇略
    2023-03-14

    对这个线程函数进行了一些修改,以便在电子表格中搜索,我得到了行数和行值(该行的所有单元格)。

    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"
          }
        }
    
    
     类似资料:
    • 正如标题所说,我想知道在Amazon DynamoDB中扫描表的最佳方式,通过主键以外的另一个字段进行搜索。 我对此进行了搜索,读了很多书,但我找到了这个解决方案: 这对我来说是可行的,但我也了解到,对性能和定价而言,在表上执行扫描是个坏主意。但是,怎么做呢? > DocumentClient和DynamoDB对象有什么区别? 我总是使用。get()用于在DynamoDB上获取所需内容。这是一种好

    • 问题内容: 我最近从Angular转到了ReactJs。我正在使用jQuery进行API调用。我有一个API,该API返回要打印在列表中的随机用户列表。 我不确定如何编写我的API调用。最佳做法是什么? 我尝试了以下操作,但未得到任何输出。如果需要,我愿意实现替代API库。 下面是我的代码: 问题答案: 在这种情况下,您可以在中进行ajax调用,然后进行更新

    • 问题内容: 我在一个应用程序中无法代表手机号码。 我想知道是否有一个Integer类,它将允许您存储从0417254482开始的数字。也许使用字符串更合适?目前,当我尝试使用整数形式表示电话号码时,我似乎存储的是随机数而不是我打算存储的数字。 问题答案: 使用。除了其他以外,如果使用整数,则将无法存储前导零。你绝对不应该使用(太小)或(数据丢失的风险太大-参见下文);或可能是适当的(除了前导零问题

    • 问题内容: 在Python中,我想在代码中编写多行字典。有几种方法可以格式化它。我想到的是一些: mydict = { “key1”: 1, “key2”: 2, “key3”: 3, } mydict = { “key1”: 1, “key2”: 2, “key3”: 3, } mydict = { “key1”: 1, “key2”: 2, “key3”: 3, } 我知道以上任何一种在语法上

    • 我已经通过谷歌官方文档《开发者指南》API中提到的一个简单Java代码成功地在我的Google Drive帐户的现有电子表格中创建了一个新的工作表,但我想通过Java代码在我的Google Drive帐户中创建一个新的电子表格。在链接中,他们没有提到这方面的任何示例代码。我已经在Spreadservice类中看到了不同的可用方法。 如何使用Google电子表格API实现这一点?

    • 我可以从一个特定的查询中创建一个谷歌搜索结果列表,并将其导出到excel中吗?例如,我想用谷歌搜索佛罗里达州的牙齿矫正医生,并能将企业名称、电话号码和地址导出到excel电子表格中。我做了很多搜索,但找不到任何解决方案。我在找人给我指出正确的方向。非常感谢您的帮助,谢谢。