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:
- 创建柱形图
- 正在对列进行排序 'A'
数据存储在我创建柱形图的 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
}
}
]
}
参考:
我使用 google 示例 https://developers.google.com/sheets/api/samples/charts(为了测试目的只是切换第 3 行和第 4 行)来测试 Google Spreadshhet API v4 Python v3.7.8:
- 创建柱形图
- 正在对列进行排序 'A'
数据存储在我创建柱形图的 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
}
}
]
}