Google Api v4 表带条件查询

问题描述 投票:0回答:2

您好,我想知道如何在 Google Api v4 工作表查询中包含条件。

例如其中 B = '新闻

我是否将条件包含在范围内或作为附加请求参数?

我目前正在使用

获取https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchGet

POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchUpdate

google-api conditional-statements where-clause google-sheets-api
2个回答
0
投票

我认为 Sheets v4 中没有现成的 query() 函数。您可以做的是使用 spreadsheets.values.get 获取工作表中给定范围的值,然后循环这些值并进行比较。示例可在Sheetsv4 中的基本阅读中找到。

除此之外,尝试这个vlookup方法。但是,它使用 Apps 脚本。


0
投票

我查看了 API 文档,今天我仍然没有看到任何使用 API v4 进行查询的选项,但我需要它。在本地加载所有数据+过滤器的解决方案非常糟糕,例如因为我在某些列中有 4k 个字符,而且我不想每次只需要其中一部分就下载数十 MB,这是一个不可持续的解决方案。

这是我编造的,这是一个清晰有效的解决方案:

(我用的是Python,但你会明白的)

  • 假设您有名为“data”的
    data
    工作表选项卡
  • 再创建一个工作表选项卡,其名称例如: “
    data-search
  • 在“
    data-search
    ”工作表中,第一个单元格中将包含一个
    =QUERY
    函数,该函数使用其 where 条件从“
    data
    ”工作表选项卡查询数据
  • 从您的后端使用工作表 API 调用 2 个同步请求:
    • 第一个请求将更新您的查询功能/或更新where条件
    • 第二个请求将读取所有
      data-search
      数据

工作表中的 Google 工作表查询示例

data-search
:

=QUERY(data!A2:C,"SELECT * WHERE A = 'MyStringToSearchInColA'",0)

Python代码请求示例:

def do_GET(self):
   
   parsed_url = urlparse(self.path)
   
   # if req. URL contains "get_data" endpoint
   if self.path.find("get_data") != -1:


        # LOAD DATA SEARCH CONDITION FROM URL

        dataToSearch = parse_qs(parsed_url.query)['myDataForWhereCond'][0]

        # UPDATE QUERY IN SHEETS-> This will trigger its refresh too in sheets
        
        range_name = 'data-search!A1:A1'
        values = "=QUERY(data!A2:C,\"SELECT * WHERE A = '"+dataToSearch+"'\",0)"

        value_input_option = 'USER_ENTERED'
        body = {
            'values': [[str(values)]]
        }
        result = spreadsheet_service.spreadsheets().values().update(
            spreadsheetId='mySpreadsheetFileId', range=range_name,
            valueInputOption=value_input_option, body=body).execute()
        print('{0} cells updated.'.format(result.get('updatedCells')))


        # GET RESULT OF QUERIED DATA IN SHEET

        range_name2 = 'data-search!A:C'
        spreadsheet_service.spreadsheets()
        result = spreadsheet_service.spreadsheets().values().get(
            spreadsheetId='mySpreadsheetFileId', range=range_name2).execute()
        rows = result.get('values', [])
        
        # HERE YOU HAVE EVERYTHING YOU NEEDED
        print(rows)

        response_content = "OK";
        self.send_response(200)
        self.send_header(...)
        self.wfile.write(response_content.encode('utf-8'))
    else:
        print("SKIPPING GET REQ. FOR: " + self.path)
© www.soinside.com 2019 - 2024. All rights reserved.