首页 > 解决方案 > 为 google sheet api(和/或 MS Excel)动态生成范围

问题描述

我正在寻找一种以 A1 表示法动态生成单元格范围的方法。

长话短说,我有一个 python 代码,用于从 Google Sheet API 获取值和单元格颜色。

ranges = ["July!C3:C105"]

def get_hours(ranges):
    service = discovery.build('sheets', 'v4', credentials=creds)
    # The ranges to retrieve from the spreadsheet.
    include_grid_data = True
    request = service.spreadsheets().get(spreadsheetId=SPREADSHEET_ID, 
                                         ranges=ranges, 
                                         includeGridData=include_grid_data)
    response = request.execute()
    hours = []
    for item in response['sheets'][0]['data'][0]['rowData']:
        h = {}
        if 'userEnteredValue' not in item['values'][0]:
            h['amount'] = None
            h['color'] = None
        else:
            h['amount'] = item['values'][0]['userEnteredValue']['numberValue']
            h['color'] = item['values'][0]['userEnteredFormat']['backgroundColor']
            hours.append(h)

    return hours

但是我需要循环执行以获取从“C”列等到“AF”的所有内容。

所以我需要以某种方式添加范围。

“for”循环也可能是一种方法。但我不确定如何添加“AB、AC、AD”等。

标签: python-3.xexcelfor-loopgoogle-sheets

解决方案


我不完全确定我理解你想要做什么。您的问题是否只需要遍历“July!C3:AF105”?如果是这样,您可以将范围设置为该范围(但那时您似乎不会问)。

我假设您的问题是您需要单独的 LOGIC 来处理每一列?如果是这种情况,您仍然可以索引列。

  1. 在称为设置或尺寸或属性的工作簿中创建新工作表

  2. 在 7 月添加引用您的标题的 counta 或 countifs!这将告诉您有多少列。

  3. 将列数映射到字母,例如在您的情况下,C 似乎是索引计数 = 1,因此如果列 = 2,则 1 映射到 C,2 映射到 D,依此类推。

  4. 如果您需要这些列的行数,您可以使用相同的 countifs 方法

  5. 在您的 python 代码中,首先获取设置表并获取尺寸。然后,您可以将这些维度转换为任何内容。

    将有助于查看一些示例数据。或者了解您是否需要此逻辑开关 PER 列。


推荐阅读