Các bảng tổng hợp

API Google Trang tính cho phép bạn tạo và cập nhật bảng tổng hợp trong bảng tính. Các ví dụ trên trang này minh hoạ cách bạn có thể thực hiện một số thao tác phổ biến đối với bảng tổng hợp bằng API Trang tính.

Những ví dụ này được trình bày dưới dạng yêu cầu HTTP để trung lập về ngôn ngữ. Để tìm hiểu cách triển khai quá trình cập nhật hàng loạt bằng nhiều ngôn ngữ bằng cách sử dụng thư viện ứng dụng API của Google, hãy xem phần Cập nhật bảng tính.

Trong những ví dụ này, phần giữ chỗ SPREADSHEET_IDSHEET_ID cho biết nơi bạn sẽ cung cấp các mã nhận dạng đó. Bạn có thể tìm thấy mã nhận dạng bảng tính trong URL của bảng tính. Bạn có thể lấy mã trang tính bằng cách sử dụng phương thức spreadsheets.get. Các dải ô được chỉ định bằng ký hiệu A1. Một dải ô ví dụ là Sheet1!A1:D5.

Ngoài ra, phần giữ chỗ SOURCE_SHEET_ID cho biết trang tính của bạn có dữ liệu nguồn. Trong các ví dụ này, đây là bảng được liệt kê trong phần Dữ liệu nguồn của bảng tổng hợp.

Dữ liệu nguồn trong bảng tổng hợp

Đối với những ví dụ này, giả sử bảng tính đang dùng có dữ liệu "doanh số bán hàng" sau đây trong trang tính đầu tiên ("Trang tính1"). Các chuỗi trong hàng đầu tiên là nhãn cho từng cột riêng lẻ. Để xem ví dụ về cách đọc qua các trang tính khác trong bảng tính, hãy xem phần Ký hiệu A1.

A B C D E F G
1 Danh mục mặt hàng Số kiểu máy Chi phí Số lượng Khu vực Nhân viên bán hàng Ngày giao hàng
2 Vòng đu quay W-24 20,5 USD 4 Tây Beth 1/3/2016
3 Cửa ra vào D-01X 15 USD 2 Nam Tiếng Amir 15/3/2016
4 Động cơ ENG-0134 $100,00 1 Bắc Carmen 20/3/2016
5 Khung Pháp-0B1 34 USD 8 Đông Hannah 12/3/2016
6 Bảng điều khiển P-034 6 USD 4 Bắc Devyn Ngày 2 tháng 4 năm 2016
7 Bảng điều khiển P-052 11,5 USD 7 Đông Dũng 16/5/2016
8 Vòng đu quay W-24 20,5 USD 11 Nam Sheldon 30/4/2016
9 Động cơ ENG-0161 330 USD 2 Bắc Jessie Ngày 2 tháng 7 năm 2016
10 Cửa ra vào D-01Y 29 USD 6 Tây Armando 13/3/2016
11 Khung Pháp-0B1 34 USD 9 Nam Yuliana Ngày 27 tháng 2 năm 2016
12 Bảng điều khiển P-102 3 đô la 15 Tây Carmen Ngày 18 tháng 4 năm 2016
13 Bảng điều khiển P-105 8,25 USD 13 Tây Jessie Ngày 20 tháng 6 năm 2016
14 Động cơ ENG-0211 283 USD 1 Bắc Tiếng Amir Ngày 21 tháng 6 năm 2016
15 Cửa ra vào D-01X 15 USD 2 Tây Armando Ngày 3 tháng 7 năm 2016
16 Khung Pháp-0B1 34 USD 6 Nam Carmen 15/7/2016
17 Vòng đu quay W-25 20 USD 8 Nam Hannah Ngày 2 tháng 5 năm 2016
18 Vòng đu quay W-11 29 USD 13 Đông Dũng 19/5/2016
19 Cửa ra vào D-05 17,7 USD 7 Tây Beth Ngày 28 tháng 6 năm 2016
20 Khung Pháp-0B1 34 USD 8 Bắc Sheldon 30/3/2016

Thêm bảng tổng hợp

Mã mẫu spreadsheets.batchUpdate sau đây cho biết cách sử dụng UpdateCellsRequest để tạo bảng tổng hợp từ dữ liệu nguồn, neo bảng đó vào ô A50 của trang tính do SHEET_ID chỉ định.

Yêu cầu này định cấu hình bảng tổng hợp với các thuộc tính sau:

  • Một nhóm giá trị (Số lượng) cho biết số lượt bán hàng. Vì chỉ có một nhóm giá trị, nên 2 chế độ cài đặt valueLayout có thể có là tương đương.
  • Hai nhóm hàng (Item Category (Danh mục mặt hàng) và Model Number). Thứ tự đầu tiên sắp xếp theo giá trị tăng dần của tổng Số lượng từ Khu vực "Tây". Do đó, "Công cụ" (không có doanh số miền Tây) xuất hiện phía trên "Cửa" (với 15 doanh số miền Tây). Nhóm Số kiểu máy được sắp xếp theo thứ tự giảm dần của tổng doanh số bán hàng trong tất cả các khu vực, vì vậy, "W-24" (15 doanh số) sẽ xuất hiện phía trên "W-25" (doanh số 8). Bạn có thể thực hiện việc này bằng cách đặt trường valueBucket thành {}.
  • Một nhóm cột (Khu vực) sắp xếp theo thứ tự tăng dần của hầu hết các doanh số bán hàng. Một lần nữa, valueBucket được đặt thành {}. "Bắc" có tổng doanh số bán hàng thấp nhất nên xuất hiện dưới dạng cột Khu vực đầu tiên.

Giao thức yêu cầu được hiển thị dưới đây.

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"
      }
    }
  ]
}

Yêu cầu này sẽ tạo một bảng tổng hợp như sau:

Thêm kết quả công thức cho bảng tổng hợp

Thêm bảng tổng hợp có các giá trị đã tính

Mã mẫu spreadsheets.batchUpdate sau đây cho biết cách sử dụng UpdateCellsRequest để tạo bảng tổng hợp có nhóm giá trị tính toán từ dữ liệu nguồn, neo nhóm giá trị đó vào ô A50 của trang tính do SHEET_ID chỉ định.

Yêu cầu này định cấu hình bảng tổng hợp với các thuộc tính sau:

  • Hai nhóm giá trị (Số lượngTổng giá). Số liệu đầu tiên cho biết số lượt bán hàng. Giá trị thứ hai là một giá trị được tính toán dựa trên tích của chi phí một phần và tổng doanh số bán hàng, theo công thức sau: =Cost*SUM(Quantity).
  • Ba nhóm hàng (Danh mục mặt hàng, Số mô hìnhChi phí).
  • Một nhóm cột (Khu vực).
  • Các nhóm hàng và cột sẽ sắp xếp theo tên (thay vì theo Số lượng) trong mỗi nhóm, sắp xếp bảng theo thứ tự bảng chữ cái. Bạn có thể thực hiện việc này bằng cách bỏ qua trường valueBucket khỏi PivotGroup.
  • Để đơn giản hoá giao diện của bảng, yêu cầu sẽ ẩn các tổng phụ cho tất cả trừ các nhóm hàng và cột chính.
  • Yêu cầu này sẽ đặt valueLayout thành VERTICAL để cải thiện giao diện của bảng. valueLayout chỉ quan trọng nếu có 2 nhóm giá trị trở lên.

Giao thức yêu cầu được hiển thị dưới đây.

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"
      }
    }
  ]
}

Yêu cầu này sẽ tạo một bảng tổng hợp như sau:

Thêm kết quả công thức nhóm giá trị trên bảng tổng hợp

Xoá bảng tổng hợp

Mã mẫu spreadsheets.batchUpdate sau đây cho biết cách sử dụng UpdateCellsRequest để xoá bảng tổng hợp (nếu có) được cố định trên ô A50 của trang tính do SHEET_ID chỉ định.

UpdateCellsRequest có thể xoá bảng tổng hợp bằng cách đưa "pivotTable" vào tham số fields, đồng thời bỏ qua trường pivotTable trên ô liên kết.

Giao thức yêu cầu được hiển thị dưới đây.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateCells": {
          "rows": [ 
            {
            "values": [
              {}
            ]
          }
        ],
        "start": {
          "sheetId": SHEET_ID,
          "rowIndex": 49,
          "columnIndex": 0
        },
        "fields": "pivotTable"
      }
    }
  ]
}

Chỉnh sửa các cột và hàng trong bảng tổng hợp

Mã mẫu spreadsheets.batchUpdate sau đây cho biết cách sử dụng UpdateCellsRequest để chỉnh sửa bảng tổng hợp được tạo trong phần Thêm bảng tổng hợp.

Bạn không thể thay đổi từng tập hợp con của trường pivotTable trong tài nguyên CellData bằng tham số fields. Để chỉnh sửa, bạn phải cung cấp toàn bộ trường pivotTable. Về cơ bản, việc chỉnh sửa bảng tổng hợp yêu cầu phải thay thế bằng một bảng mới.

Yêu cầu này thực hiện những thay đổi sau đối với bảng tổng hợp ban đầu:

  • Xoá nhóm hàng thứ hai khỏi bảng tổng hợp ban đầu (Số kiểu máy).
  • Thêm một nhóm cột (Người bán hàng). Các cột sắp xếp theo thứ tự giảm dần theo tổng số lượt bán hàng từ Bảng điều khiển. "Carmen" (15 giao dịch bán Bảng điều khiển) xuất hiện ở bên trái "Jessie" (13 doanh số Bảng điều khiển).
  • Thu gọn cột cho từng Khu vực, ngoại trừ " Miền Tây", ẩn nhóm Nhân viên bán hàng cho khu vực đó. Bạn có thể thực hiện việc này bằng cách đặt collapsed thành true trong valueMetadata cho cột đó trong nhóm cột Khu vực.

Giao thức yêu cầu được hiển thị dưới đây.

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"
      }
    }
  ]
}

Yêu cầu này sẽ tạo một bảng tổng hợp như sau:

Chỉnh sửa kết quả công thức trong bảng tổng hợp

Đọc dữ liệu bảng tổng hợp

Mã mẫu spreadsheets.get sau đây cho biết cách lấy dữ liệu bảng tổng hợp từ một bảng tính. Tham số truy vấn fields chỉ định rằng chỉ trả về dữ liệu bảng tổng hợp (ngược với dữ liệu giá trị ô).

Giao thức yêu cầu được hiển thị dưới đây.

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(properties.sheetId,data.rowData.values.pivotTable)

Phản hồi bao gồm một tài nguyên Spreadsheet, trong đó có một đối tượng Sheet có các phần tử SheetProperties. Ngoài ra, còn có một mảng các phần tử GridData chứa thông tin về PivotTable. Thông tin về bảng tổng hợp có trong tài nguyên CellData của trang tính cho ô chứa bảng cố định (tức là góc trên bên trái của bảng). Nếu bạn đặt một trường phản hồi thành giá trị mặc định, thì trường đó sẽ bị loại khỏi phản hồi.

Trong ví dụ này, trang tính đầu tiên (SOURCE_SHEET_ID) chứa dữ liệu nguồn của bảng thô, trong khi trang tính thứ hai (SHEET_ID) có bảng tổng hợp được neo trên B3. Dấu ngoặc nhọn trống biểu thị trang tính hoặc ô không chứa dữ liệu trong bảng tổng hợp. Để tham khảo, yêu cầu này cũng trả về mã nhận dạng trang tính.

{
  "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
      }
    }
  ],
}