您可以使用 Google 試算表 API 在試算表中建立及更新樞紐分析表。本頁面的範例說明如何使用 Google 試算表 API 執行常見的樞紐分析表作業。
這些範例以 HTTP 要求的形式呈現,以便不受語言限制。如要瞭解如何使用 Google API 用戶端程式庫,以不同語言實作批次更新,請參閱「更新試算表」。
在這些範例中,預留位置 SPREADSHEET_ID
和 SHEET_ID
會指出您要提供這些 ID 的位置。你可以在試算表網址中找到試算表 ID。您可以使用 spreadsheets.get
方法取得工作表 ID。範圍使用 A1 標記法指定。範例範圍為 Sheet1!A1:D5。
此外,預留位置 SOURCE_SHEET_ID
會指出含有來源資料的工作表。在這些範例中,這是「資料透視表來源資料」下方列出的資料表。
資料透視表來源資料
在這些範例中,假設所使用的試算表在第一個工作表 (「工作表 1」) 中含有以下來源的「銷售」資料。第一列中的字串是個別欄的標籤。如需查看如何讀取試算表中其他工作表的範例,請參閱「A1 符號」。
A | B | C | D | E | F | G | |
1 | 項目類別 | 型號 | 費用 | 數量 | 區域 | 銷售專員 | 出貨日期 |
2 | 車輪 | W-24 | $20.50 | 4 | 西 | Beth | 2016 年 3 月 1 日 |
3 | 門 | D-01X | $15.00 | 2 | 南 | Amir | 2016 年 3 月 15 日 |
4 | 引擎 | ENG-0134 | $100.00 | 1 | 北 | Carmen | 2016 年 3 月 20 日 |
5 | 頁框 | FR-0B1 | $34.00 | 8 | 東 | Hannah | 2016 年 3 月 12 日 |
6 | 面板 | P-034 | $6.00 | 4 | 北 | Devyn | 2016 年 4 月 2 日 |
7 | 面板 | P-052 | $11.50 | 7 | 東 | Erik | 2016 年 5 月 16 日 |
8 | 車輪 | W-24 | $20.50 | 11 | 南 | Sheldon | 2016 年 4 月 30 日 |
9 | 引擎 | ENG-0161 | $330.00 | 2 | 北 | Jessie | 2016 年 7 月 2 日 |
10 | 門 | D-01Y | $29.00 美元 | 6 | 西 | Armando | 2016 年 3 月 13 日 |
11 | 頁框 | FR-0B1 | $34.00 | 9 | 南 | Yuliana | 2016 年 2 月 27 日 |
12 | 面板 | P-102 | $3.00 美元 | 15 | 西 | Carmen | 2016 年 4 月 18 日 |
13 | 面板 | P-105 | $8.25 美元 | 13 | 西 | Jessie | 2016 年 6 月 20 日 |
14 | 引擎 | ENG-0211 | $283.00 美元 | 1 | 北 | Amir | 2016 年 6 月 21 日 |
15 | 門 | D-01X | $15.00 | 2 | 西 | Armando | 2016 年 7 月 3 日 |
16 | 頁框 | FR-0B1 | $34.00 | 6 | 南 | Carmen | 7/15/2016 |
17 | 車輪 | W-25 | $20.00 | 8 | 南 | Hannah | 2016 年 5 月 2 日 |
18 | 車輪 | W-11 | $29.00 美元 | 13 | 東 | Erik | 2016 年 5 月 19 日 |
19 | 門 | D-05 | $17.70 美元 | 7 | 西 | Beth | 2016 年 6 月 28 日 |
20 | 頁框 | FR-0B1 | $34.00 | 8 | 北 | Sheldon | 2016 年 3 月 30 日 |
新增資料透視表
以下 spreadsheets.batchUpdate
程式碼範例說明如何使用 UpdateCellsRequest
從來源資料建立樞紐分析表,並將其固定在 SHEET_ID
指定工作表的 A50 儲存格上。
要求會使用下列屬性設定樞紐資料表:
- 一個值群組 (Quantity),用於表示銷售次數。由於只有一個值群組,因此 2 個可能的
valueLayout
設定是等價的。 - 兩個資料列群組 (商品類別和型號)。第一個排序依據是「West」區域的總數量,以遞增值排序。因此,「Engine」(沒有 West 銷售) 會顯示在「Door」(有 15 筆 West 銷售) 上方。「Model Number」分組會依所有地區的總銷售量由高至低排序,因此「W-24」(15 筆銷售) 會顯示在「W-25」(8 筆銷售) 之上。方法是將
valueBucket
欄位設為{}
。 - 一個資料欄群組 (Region),以遞增順序排序銷售量最高的項目。再次重複說明,
valueBucket
設為{}
。「北部」的總銷售量最少,因此會顯示為第一個「區域」欄。
要求通訊協定如下所示。
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID
:batchUpdate
{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID
, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } }, { "sourceColumnOffset": 1, "showTotals": true, "sortOrder": "DESCENDING", "valueBucket": {} } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true, "valueBucket": {} } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 } ], "valueLayout": "HORIZONTAL" } } ] } ], "start": { "sheetId":SHEET_ID
, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
這項要求會建立如下所示的資料透視表:
新增含有計算值的資料透視表
以下 spreadsheets.batchUpdate
程式碼範例說明如何使用 UpdateCellsRequest
建立樞紐分析表,並使用來自來源資料的計算值群組,將樞紐分析表固定在 SHEET_ID
指定工作表的 A50 儲存格上。
要求會使用下列屬性設定樞紐資料表:
- 兩個值群組 (數量和總價)。第一個代表銷售次數。第二個是根據零件成本和銷售總數的乘積計算得出的值,使用以下公式:
=Cost*SUM(Quantity)
。 - 三個資料列群組 (「Item Category」、「Model Number」和「Cost」)。
- 一個欄群組 (區域)。
- 資料列和資料欄群組會依據各群組中的名稱 (而非「數量」) 排序,將表格依字母順序排列。方法是從
PivotGroup
中省略valueBucket
欄位。 - 為了簡化表格外觀,要求會隱藏所有子項總計,除了主要資料列和欄群組。
- 這項要求會將
valueLayout
設為VERTICAL
,以改善表格外觀。只有在有 2 個以上的值組搭配時,valueLayout
才重要。
要求通訊協定如下所示。
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID
:batchUpdate
{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID
, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING" }, { "sourceColumnOffset": 1, "showTotals": false, "sortOrder": "ASCENDING", }, { "sourceColumnOffset": 2, "showTotals": false, "sortOrder": "ASCENDING", } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 }, { "summarizeFunction": "CUSTOM", "name": "Total Price", "formula": "=Cost*SUM(Quantity)" } ], "valueLayout": "VERTICAL" } } ] } ], "start": { "sheetId":SHEET_ID
, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
這項要求會建立如下所示的資料透視表:
刪除資料透視表
以下 spreadsheets.batchUpdate
程式碼範例說明如何使用 UpdateCellsRequest
刪除 SHEET_ID
指定工作表的 A50 儲存格所繫結的樞紐分析表 (如有)。
UpdateCellsRequest
可以透過在 fields
參數中加入「pivotTable」,同時省略錨定儲存格上的 pivotTable
欄位,移除樞紐分析表。
要求通訊協定如下所示。
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID
:batchUpdate
{
"requests": [
{
"updateCells": {
"rows": [
{
"values": [
{}
]
}
],
"start": {
"sheetId": SHEET_ID
,
"rowIndex": 49,
"columnIndex": 0
},
"fields": "pivotTable"
}
}
]
}
編輯資料透視表的欄和列
以下 spreadsheets.batchUpdate
程式碼範例說明如何使用 UpdateCellsRequest
編輯在「新增樞紐分析表」中建立的樞紐分析表。
您無法使用 fields
參數個別變更 CellData
資源中的 pivotTable
欄位子集。如要編輯,必須提供整個 pivotTable
欄位。基本上,你必須用新的資料透視表取代編輯的資料透視表。
這項要求會對原始資料透視表進行下列變更:
- 從原始樞紐分析表 (型號編號) 中移除第二個資料列群組。
- 新增資料欄群組 (Salesperson)。這些欄會依據 Panel 銷售量的總數,以遞減順序排序。「Carmen」(15 個「Panel」銷售量) 會顯示在「Jessie」(13 個「Panel」銷售量) 的左側。
- 除了「西部」以外,為每個區域收合資料欄,隱藏該區域的業務人員群組。方法是在 Region 資料欄群組中,將
valueMetadata
中該資料欄的collapsed
設為true
。
要求通訊協定如下所示。
POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID
:batchUpdate
{ "requests": [ { "updateCells": { "rows": [ { "values": [ { "pivotTable": { "source": { "sheetId":SOURCE_SHEET_ID
, "startRowIndex": 0, "startColumnIndex": 0, "endRowIndex": 20, "endColumnIndex": 7 }, "rows": [ { "sourceColumnOffset": 0, "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } } ], "columns": [ { "sourceColumnOffset": 4, "sortOrder": "ASCENDING", "showTotals": true, "valueBucket": {}, "valueMetadata": [ { "value": { "stringValue": "North" }, "collapsed": true }, { "value": { "stringValue": "South" }, "collapsed": true }, { "value": { "stringValue": "East" }, "collapsed": true } ] }, { "sourceColumnOffset": 5, "sortOrder": "DESCENDING", "showTotals": false, "valueBucket": { "buckets": [ { "stringValue": "Panel" } ] }, } ], "values": [ { "summarizeFunction": "SUM", "sourceColumnOffset": 3 } ], "valueLayout": "HORIZONTAL" } } ] } ], "start": { "sheetId":SHEET_ID
, "rowIndex": 49, "columnIndex": 0 }, "fields": "pivotTable" } } ] }
這項要求會建立如下所示的資料透視表:
讀取資料透視表資料
以下 spreadsheets.get
程式碼範例說明如何從試算表取得樞紐分析表資料。fields
查詢參數會指定只傳回資料透視表資料 (而非儲存格值資料)。
要求通訊協定如下所示。
GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID
?fields=sheets(properties.sheetId,data.rowData.values.pivotTable)
回應包含 Spreadsheet
資源,其中包含帶有 SheetProperties
元素的 Sheet
物件。另外還有一個 GridData
元素陣列,其中包含 PivotTable
的相關資訊。樞紐分析表資訊包含在試算表的 CellData
資源中,該資源會標定資料表錨定在哪個儲存格 (也就是資料表的左上角)。如果回應欄位設為預設值,系統會從回應中省略該欄位。
在這個範例中,第一個工作表 (SOURCE_SHEET_ID
) 包含原始表格來源資料,而第二個工作表 (SHEET_ID
) 則包含資料透視表,並錨定在 B3 上。空白的捲曲符號表示試算表或儲存格不含資料透視表資料。為方便您參考,這項要求也會傳回工作表 ID。
{ "sheets": [ { "data": [{}], "properties": { "sheetId":SOURCE_SHEET_ID
} }, { "data": [ { "rowData": [ {}, {}, { "values": [ {}, { "pivotTable": { "columns": [ { "showTotals": true, "sortOrder": "ASCENDING", "sourceColumnOffset": 4, "valueBucket": {} } ], "rows": [ { "showTotals": true, "sortOrder": "ASCENDING", "valueBucket": { "buckets": [ { "stringValue": "West" } ] } }, { "showTotals": true, "sortOrder": "DESCENDING", "valueBucket": {}, "sourceColumnOffset": 1 } ], "source": { "sheetId":
SOURCE_SHEET_ID
, "startColumnIndex": 0, "endColumnIndex": 7, "startRowIndex": 0, "endRowIndex": 20 }, "values": [ { "sourceColumnOffset": 3, "summarizeFunction": "SUM" } ] } } ] } ] } ], "properties": { "sheetId":
SHEET_ID
} } ], }