谷歌表的API过滤器功能不起作用?

时间:2019-11-20 14:01:57

标签: python filter google-sheets-api

我正在尝试使用此处的示例https://developers.google.com/sheets/api/guides/filters使该过滤器适用于Google表格API4。

指向他们的示例工作表的链接不起作用,因此我在此处创建了自己的示例:https://docs.google.com/spreadsheets/d/1kT4UU-jvFj273psdJ_fQz5xUP1Xv3Mg9zrs9U2ydM0g/edit#gid=0。它是共享的。

当我运行他们在网站上提供的代码时,工作表绝对不执行任何操作。这是我的代码。我只添加了前三行。

import custom
spreadsheet_id = '1kT4UU-jvFj273psdJ_fQz5xUP1Xv3Mg9zrs9U2ydM0g'
g = custom.APIv4()  # builds service

my_range = {
    'sheetId': 0,
    'startRowIndex': 0,
    'startColumnIndex': 0,
}
addFilterViewRequest = {
    'addFilterView': {
        'filter': {
            'title': 'Sample Filter',
            'range': my_range,
            'sortSpecs': [{
                'dimensionIndex': 3,
                'sortOrder': 'DESCENDING'
            }],
            'criteria': {
                0: {
                    'hiddenValues': ['Panel']
                },
                6: {
                    'condition': {
                        'type': 'DATE_BEFORE',
                        'values': {
                            'userEnteredValue': '4/30/2016'
                        }
                    }
                }
            }
        }
    }
}

body = {'requests': [addFilterViewRequest]}
addFilterViewResponse = g.service.spreadsheets().batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()

duplicateFilterViewRequest = {
    'duplicateFilterView': {
        'filterId':
            addFilterViewResponse['replies'][0]['addFilterView']['filter']
            ['filterViewId']
    }
}

body = {'requests': [duplicateFilterViewRequest]}
duplicateFilterViewResponse = g.service.spreadsheets() \
    .batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()

updateFilterViewRequest = {
    'updateFilterView': {
        'filter': {
            'filterViewId': duplicateFilterViewResponse['replies'][0]
            ['duplicateFilterView']['filter']['filterViewId'],
            'title': 'Updated Filter',
            'criteria': {
                0: {},
                3: {
                    'condition': {
                        'type': 'NUMBER_GREATER',
                        'values': {
                            'userEnteredValue': '5'
                        }
                    }
                }
            }
        },
        'fields': {
            'paths': ['criteria', 'title']
        }
    }
}

body = {'requests': [updateFilterViewRequest]}
updateFilterViewResponse = g.service.spreadsheets() \
    .batchUpdate(spreadsheetId=spreadsheet_id, body=body).execute()

1 个答案:

答案 0 :(得分:1)

在该示例中,有3个请求:

首先,addFilterViewRequestaddFilterViewResponse作为响应。

第二个是第一个的重复: duplicateFilterViewRequest,响应为duplicateFilterViewResponse

第三个是updateFilterViewRequest,响应为updateFilterViewResponse

该示例当然不会返回任何内容,但会创建过滤器,如果您打开电子表格并在菜单上找到它们,则可以在菜单中找到:数据->过滤器视图,您会发现它们按您的名字列出已经给了他们。

但是您也可以在正在使用的代码中添加以下内容:

    return addFilterViewResponse

因此,这将为您打印出第一个过滤器的完整响应

    return addFilterViewResponse['replies'][0]['addFilterView']['filter']['filterViewId']

这将为您首先创建的过滤器提供filterViewId,如果您想在操作中看到它,则可以执行以下操作:

https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit#gid=YOUR_GID&fvid=FILTERVIEWID

哪里 YOUR_SPREADSHEET_ID YOUR_GID可以是0,也可以是您在链接上找到的电子表格的GID。 FILTERVIEWID是您刚得到的电话号码。

我希望这可以澄清您的疑问。