我使用以下代码通过引用工作表ID自动创建数据透视表。我想知道如何使用Grand Total列对数据透视表进行排序。我可以在进入电子表格时手动完成,但我想自动完成。我检查了Google工作表文档HERE但是无法弄明白。也许它创造了一个桶但不确定。
这是我当前的工作代码,没有对值部分进行排序:
{
"requests": [
{
"updateCells": {
"rows": {
"values": [
{
"pivotTable": {
"source": {
"sheetId": source_sheet_id,
"startRowIndex": 0,
"startColumnIndex": 0,
"endRowIndex": max_row_count,
"endColumnIndex": 3 #total columns
},
"rows": [
{
"sourceColumnOffset": code_index,
"showTotals": True,
"sortOrder": "ASCENDING",
"valueBucket": {
"buckets": [
{
"stringValue": "West"
}
]
}
}
],
"columns": [
{
"sourceColumnOffset": month_index,
"sortOrder": "ASCENDING",
"showTotals": True,
"valueBucket": {
"buckets": [
{
"stringValue": "Panel"
}
]
},
}
],
"values": [
{
"summarizeFunction": "SUM",
"sourceColumnOffset": counts_index
}
],
"valueLayout": "HORIZONTAL"
}
}
]
},
"start": {
"sheetId": destination_sheet_id,
"rowIndex": 0,
"columnIndex": 0
},
"fields": "pivotTable"
}
}
]
}
答案 0 :(得分:2)
我遇到了同样的问题,经过长时间的研究,我将其修复。
技巧是在每行中添加一个空的“ valueBucket”键,如下所示:
"rows": [
{
"sourceColumnOffset": 0,
"showTotals": true,
"sortOrder": "DESCENDING",
"valueBucket": {}
},
然后,这些行将按“总计”列进行排序。
我在这里找到了答案:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#SortOrder
它说:“例如,在具有一个行组和两个列组的数据透视表中,该行组最多可以列出两个值。第一个值对应于第一个列组中的值,第二个值对应对应于第二个列组中的值。如果未列出任何值,则表明应根据列组中的“总计”对行进行排序。如果仅列出一个值,则相当于使用该存储桶的“总计”。”
在您的情况下,数据是从此处获取的:https://developers.google.com/sheets/api/samples/pivot-tables
查看此工作表示例:https://docs.google.com/spreadsheets/d/1f5s03qLAVaLfUfkyvjZtllVNz0FxAmn2jEmL9wYVGh8/edit?usp=sharing
在示例中,此函数根据您的代码创建了数据透视表,并使用Grand Total Column排序的值。
function makePivot() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheetId = sheet.getSheetByName("Data").getSheetId();
// Create a new sheet which will contain our Pivot Table
var pivotTableSheet = sheet.insertSheet("Pivot1");
var pivotTableSheetId = pivotTableSheet.getSheetId();
var request = {
"updateCells": {
"rows": {
"values": [
{
"pivotTable": {
"source": {
"sheetId": sourceSheetId,
"startRowIndex": 0,
"startColumnIndex": 0,
"endRowIndex": 20,
"endColumnIndex": 7
},
"rows": [
{
"sourceColumnOffset": 0,
"showTotals": true,
"sortOrder": "DESCENDING",
"valueBucket": {}
},
{
"sourceColumnOffset": 1,
"showTotals": true,
"sortOrder": "DESCENDING",
"valueBucket": {}
}
],
"columns": [
{
"sourceColumnOffset": 4,
"sortOrder": "ASCENDING",
"showTotals": true}
],
"values": [
{
"summarizeFunction": "SUM",
"sourceColumnOffset": 3
}
],
"valueLayout": "HORIZONTAL"
}
}
]
},
"start": {
"sheetId": pivotTableSheetId,
"rowIndex": 2,
"columnIndex": 0
},
"fields": "pivotTable"
}
}
Sheets.Spreadsheets.batchUpdate({'requests': [request]}, sheet.getId());
}
希望这会有所帮助!
答案 1 :(得分:1)
向以下网址发送POST请求(填写您的电子表格ID):https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
包含以下有效内容(插入总计列号的实际值):
{
"requests": [
{
"sortRange": {
"range": {
"sheetId": sheetId,
"startRowIndex": 0,
"endRowIndex": 10,
"startColumnIndex": 0,
"endColumnIndex": 6
},
"sortSpecs": [
{
"dimensionIndex": Index of GrandTotal Column,
"sortOrder": "ASCENDING"
}
]
}
}
]
}
请参阅此处查看完整文档:https://developers.google.com/sheets/api/samples/data(最底层示例)