Python Google 电子表格 API 排序无效

Python Google Spreadsheet API sorting not effective

我使用 google 示例 https://developers.google.com/sheets/api/samples/charts(为了测试目的只是切换第 3 行和第 4 行)来测试 Google Spreadshhet API v4 Python v3.7.8:

数据存储在我创建柱形图的 google 驱动器中的电子表格中。

柱形图已创建,但柱形图 'A' 未排序(升序)。 以下代码:

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

...

body = {'requests': [
    {'addChart': 
     {'chart': 
      {'spec': 
       {'title': 'Model Q1 Sales', 
        'titleTextPosition': {'horizontalAlignment': 'CENTER'}, 
        'basicChart': 
        {'domains': [
            {'domain': 
             {'sourceRange': 
              {'sources': [
                  {'sheetId': 909072886, 
                   'startRowIndex': 0, 
                   'endRowIndex': 7, 
                   'startColumnIndex': 0, 
                   'endColumnIndex': 1}]}}}], 
         'series': [
             {'series': 
              {'sourceRange': 
               {'sources': [
                   {'sheetId': 909072886, 
                    'startRowIndex': 0, 
                    'endRowIndex': 7, 
                    'startColumnIndex': 1, 
                    'endColumnIndex': 2}]}}, 
              'targetAxis': 'LEFT_AXIS'}, 
             {'series': 
              {'sourceRange': 
               {'sources': [
                   {'sheetId': 909072886, 
                    'startRowIndex': 0, 
                    'endRowIndex': 7, 
                    'startColumnIndex': 2, 
                    'endColumnIndex': 3}]}}, 
              'targetAxis': 'LEFT_AXIS'},   
             {'series': 
              {'sourceRange': 
               {'sources': [
                   {'sheetId': 909072886, 
                    'startRowIndex': 0, 
                    'endRowIndex': 7, 
                    'startColumnIndex': 3, 
                    'endColumnIndex': 4}]}}, 
              'targetAxis': 'LEFT_AXIS'}], 
         'legendPosition': 'BOTTOM_LEGEND', 
         'axis': [
             {'position': 'BOTTOM_AXIS', 
              'title': 'Model Numbers', 
              'titleTextPosition': {'horizontalAlignment': 'CENTER'}}, 
             {'position': 'LEFT_AXIS', 
              'title': 'Sales', 
              'titleTextPosition': {'horizontalAlignment': 'CENTER'}}], 
         'headerCount': 1, 
         'chartType': 'COLUMN',  
         'stackedType': 'STACKED'}, 
        'sortSpecs': [
            {'dimensionIndex': 0, 
             'sortOrder': 'ASCENDING'}]}, 
       'position': 
       {'overlayPosition': 
        {'anchorCell': 
         {'sheetId': 909072886, 
          'rowIndex': 7, 
          'columnIndex': 6}
        }
       }
      }
     }
    }
]
}

response = service.spreadsheets().batchUpdate(spreadsheetId=file_id, body=body).execute()

我应该得到以下信息:

但是我明白了:排序部分没有效果。

备注:我也尝试了 sortSpecs

但没有成功
'dataSourceColumnReference': {'name': 'A'}

代替

'dimensionIndex': 0

不要犹豫,支持我!提前谢谢你。

问题:

添加图表时,sortSpecs 仅支持来自外部数据源的数据。来自 API Reference:

sortSpecs[]: The order to sort the chart data by. Only a single sort spec is supported. Only supported for data source charts.

解决方案:

您应该自己对数据进行排序。您可以通过将 sortRange 请求添加到您的 batchUpdate:

以编程方式执行此操作
body = {
    'requests': [
        {
            'sortRange': {
                'range': {
                    'sheetId': 909072886,
                    'startRowIndex': 1,
                    'endRowIndex': 7,
                    'startColumnIndex': 0,
                    'endColumnIndex': 5
                },
                'sortSpecs': [
                    {
                        'sortOrder': 'ASCENDING',
                        'dimensionIndex': 0
                    }
                ]
            }
        },
        {
            'addChart': {
                # Add chart request body
            }
        }
    ]
}

参考: