Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google电子表格API排序无效_Python_Api_Sorting_Google Sheets_Google Sheets Api - Fatal编程技术网

Python Google电子表格API排序无效

Python Google电子表格API排序无效,python,api,sorting,google-sheets,google-sheets-api,Python,Api,Sorting,Google Sheets,Google Sheets Api,我使用google示例(为了测试的目的,只需切换第3行和第4行)用Python v3.7.8测试google Spreadshhet API v4: 创建柱状图 对列“A”进行排序 数据存储在谷歌硬盘的电子表格中,我在那里创建了柱状图 创建了柱状图,但未对列“A”进行排序(升序)。以下代码: from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow f

我使用google示例(为了测试的目的,只需切换第3行和第4行)用Python v3.7.8测试google Spreadshhet API v4:

  • 创建柱状图
  • 对列“A”进行排序
数据存储在谷歌硬盘的电子表格中,我在那里创建了柱状图

创建了柱状图,但未对列“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()
我应该得到以下信息:

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

备注:我也尝试过SortSpec,但没有成功

'dataSourceColumnReference': {'name': 'A'}
代替

'dimensionIndex': 0
别犹豫,支持我!提前感谢。

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

sortSpecs[]对图表数据进行排序的顺序。仅支持单个排序规范仅支持数据源图表

解决方案: 您应该对数据本身进行排序。通过将请求添加到批处理更新中,您可以通过编程方式完成此操作:

body = {
    'requests': [
        {
            'sortRange': {
                'range': {
                    'sheetId': 909072886,
                    'startRowIndex': 1,
                    'endRowIndex': 7,
                    'startColumnIndex': 0,
                    'endColumnIndex': 5
                },
                'sortSpecs': [
                    {
                        'sortOrder': 'ASCENDING',
                        'dimensionIndex': 0
                    }
                ]
            }
        },
        {
            'addChart': {
                # Add chart request body
            }
        }
    ]
}
参考:

@lamblichus,谢谢您的快速回答。我将测试你的代码。然而,我想知道如何在图表中进行,正如在[参考]()中所解释的那样。也许我不明白…@hganger我不认为你只能在图表中排序,而不能在相应的数据范围内排序。
sortSpecs
仅用于外部数据源,如我提供的参考中所述。@lamblichus。我已经测试过了,但是service.spreadsheets().batchUpdate(spreadsheetId=file_id,body=body)。execute()在请求时创建了一个错误:HttpError 400********************************************:batchUpdate?alt=json返回了“requests[0]处的无效值”(其中一个),其中一个字段“kind”已经设置。无法设置“addChart”。详细信息:“[{@type':'type.googleapis.com/google.rpc.BadRequest”,“fieldViolations':[{'field':'requests[0]”,“description':“requests[0]”处的值无效(其中一个),已设置字段'kind'中的一个。无法设置'addChart'}]>@hganger我无法复制此信息。使用此命令时,我没有收到任何错误,请求正在成功运行。您需要添加与
addChart
请求对应的代码(您共享的代码,但不需要
sortSpecs
部分)。你那样做了吗?@hganger很抱歉,我在将代码复制到答案时,把开头/结尾的
{}
搞糟了。我想我现在已经修好了,让我知道它是否有效。