Wykresy

Interfejs Google Sheets API umożliwia tworzenie i aktualizowanie wykresów w arkuszach kalkulacyjnych w razie potrzeby. Przykłady na tej stronie pokazują, jak za pomocą interfejsu Sheets API wykonać niektóre typowe operacje na wykresach.

Przykłady te są przedstawione w formie żądań HTTP, aby były niezależne od języka. Aby dowiedzieć się, jak wdrożyć aktualizację zbiorczą w różnych językach za pomocą bibliotek klienta interfejsu API Google, zobacz Aktualizowanie arkuszy kalkulacyjnych.

W tych przykładach obiekty zastępcze SPREADSHEET_IDSHEET_ID

wskazuje, gdzie należy podać te identyfikatory. Identyfikator arkusza kalkulacyjnego znajdziesz w adresie URL arkusza. Identyfikator arkusza możesz uzyskać za pomocą metody spreadsheets.get. Zakresy są określone w notacji A1. Przykładowy zakres to Arkusz1!A1:D5.

Dodatkowo symbol zastępczy CHART_ID oznacza identyfikator danego wykresu. Możesz ustawić ten identyfikator podczas tworzenia wykresu za pomocą interfejsu API Arkuszy lub pozwolić interfejsowi API Arkuszy na wygenerowanie go. Identyfikatory istniejących wykresów możesz uzyskać za pomocą metody spreadsheets.get.

Na koniec symbol zastępczy SOURCE_SHEET_ID wskazuje arkusz z danymi źródłowymi. W tych przykładach jest to tabela wymieniona w sekcji Dane źródłowe wykresu.

Dane źródłowe wykresu

W tych przykładach załóżmy, że używany arkusz kalkulacyjny zawiera w pierwszym arkuszu („Arkusz1”) te dane źródłowe: Ciągi znaków w pierwszym wierszu są etykietami poszczególnych kolumn. Przykłady odczytywania danych z innych arkuszy w arkuszu kalkulacyjnym znajdziesz w artykule Notacja A1.

A B C D E
1 Numer modelu Sprzedaż – styczeń Sprzedaż – luty Sprzedaż – marzec Łączna sprzedaż
2 D-01X 68 74 60 202
3 FR-0B1 97 76 88 261
4 P-034 27 49 32 108
5 P-105 46 44 67 157
6 W-11 75 68 87 230
7 W-24 74 52 62 188

Dodawanie wykresu kolumnowego

Poniższy przykładowy kod spreadsheets.batchUpdate pokazuje, jak za pomocą AddChartRequest utworzyć wykres kolumnowy na podstawie danych źródłowych i umieścić go w nowym arkuszu. Żądanie wykonuje te czynności, aby skonfigurować wykres:

  • Ustawia typ wykresu jako wykres kolumnowy.
  • Dodaje legendę u dołu wykresu.
  • Ustawia tytuły wykresu i osi.
  • Konfiguruje 3 serie danych przedstawiające sprzedaż w 3 różnych miesiącach, używając domyślnego formatowania i kolorów.

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addChart": {
        "chart": {
          "spec": {
            "title": "Model Q1 Sales",
            "basicChart": {
              "chartType": "COLUMN",
              "legendPosition": "BOTTOM_LEGEND",
              "axis": [
                {
                  "position": "BOTTOM_AXIS",
                  "title": "Model Numbers"
                },
                {
                  "position": "LEFT_AXIS",
                  "title": "Sales"
                }
              ],
              "domains": [
                {
                  "domain": {
                    "sourceRange": {
                      "sources": [
                        {
                          "sheetId": SOURCE_SHEET_ID,
                          "startRowIndex": 0,
                          "endRowIndex": 7,
                          "startColumnIndex": 0,
                          "endColumnIndex": 1
                        }
                      ]
                    }
                  }
                }
              ],
              "series": [
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "sheetId": SOURCE_SHEET_ID,
                          "startRowIndex": 0,
                          "endRowIndex": 7,
                          "startColumnIndex": 1,
                          "endColumnIndex": 2
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                },
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "sheetId": SOURCE_SHEET_ID,
                          "startRowIndex": 0,
                          "endRowIndex": 7,
                          "startColumnIndex": 2,
                          "endColumnIndex": 3
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                },
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "sheetId": SOURCE_SHEET_ID,
                          "startRowIndex": 0,
                          "endRowIndex": 7,
                          "startColumnIndex": 3,
                          "endColumnIndex": 4
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                }
              ],
              "headerCount": 1
            }
          },
          "position": {
            "newSheet": true
          }
        }
      }
    }
  ]
}

Żądanie utworzy wykres w nowym arkuszu, np. w ten sposób:

Dodawanie wyniku przepisu na wykresie kolumnowym

Dodawanie wykresu kołowego

Poniższy przykład kodu spreadsheets.batchUpdate pokazuje, jak za pomocą funkcji AddChartRequest utworzyć trójwymiarowy wykres kołowy na podstawie danych źródłowych. Żądanie wykonuje te czynności, aby skonfigurować wykres:

  • Ustawia tytuł wykresu.
  • Dodaje legendę po prawej stronie wykresu.
  • Ustawia wykres jako wykres kołowy 3D. Pamiętaj, że wykresy kołowe 3D nie mogą mieć „dziury” w środku, tak jak płaskie wykresy kołowe.
  • Ustawia serię danych wykresu jako łączną sprzedaż dla każdego numeru modelu.
  • Zakotwicza wykres w komórce C3 arkusza określonego przez SHEET_ID, z przesunięciem o 50 pikseli w kierunku osi X i Y.

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addChart": {
        "chart": {
          "spec": {
            "title": "Model Q1 Total Sales",
            "pieChart": {
              "legendPosition": "RIGHT_LEGEND",
              "threeDimensional": true,
              "domain": {
                "sourceRange": {
                  "sources": [
                    {
                      "sheetId": SOURCE_SHEET_ID,
                      "startRowIndex": 0,
                      "endRowIndex": 7,
                      "startColumnIndex": 0,
                      "endColumnIndex": 1
                    }
                  ]
                }
              },
              "series": {
                "sourceRange": {
                  "sources": [
                    {
                      "sheetId": SOURCE_SHEET_ID,
                      "startRowIndex": 0,
                      "endRowIndex": 7,
                      "startColumnIndex": 4,
                      "endColumnIndex": 5
                    }
                  ]
                }
              },
            }
          },
          "position": {
            "overlayPosition": {
              "anchorCell": {
                "sheetId": SHEET_ID,
                "rowIndex": 2,
                "columnIndex": 2
              },
              "offsetXPixels": 50,
              "offsetYPixels": 50
            }
          }
        }
      }
    }
  ]
}

Żądanie utworzy wykres podobny do tego:

Dodawanie wyniku przepisu w formie wykresu kołowego

Możesz też zaktualizować wartość legendPosition z RIGHT_LEGEND na LABELED_LEGEND w ramach żądania, aby wartości legendy były połączone z wycinkami wykresu kołowego.

'legendPosition': 'LABELED_LEGEND',

Zaktualizowane żądanie spowoduje utworzenie wykresu podobnego do tego:

Dodawanie wyniku przepisu w formie wykresu kołowego

Dodawanie wykresu liniowego z użyciem wielu nieprzylegających zakresów

Poniższy przykładowy kod spreadsheets.batchUpdate pokazuje, jak za pomocą funkcji AddChartRequest utworzyć wykres liniowy na podstawie danych źródłowych i umieścić go w arkuszu źródłowym. Wybieranie zakresów, które nie sąsiadują ze sobą, może służyć do wykluczania wierszy z ChartSourceRange.

Żądanie wykonuje te czynności, aby skonfigurować wykres:

  • Ustawia typ wykresu jako wykres liniowy.
  • Ustawia tytuł osi poziomej X.
  • Konfiguruje serię danych reprezentującą sprzedaż. Ustawia zakresy A1:A3 i A6:A7 jako domain, a B1:B3 i B6:B7 jako series, używając domyślnego formatowania i kolorów. Zakresy są określane w adresie URL żądania za pomocą notacji A1.
  • Zakotwicza wykres w komórce H8 arkusza określonego przez SHEET_ID.

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "addChart": {
        "chart": {
          "spec": {
            "basicChart": {
              "chartType": "LINE",
              "domains": [
                {
                  "domain": {
                    "sourceRange": {
                      "sources": [
                        {
                          "startRowIndex": 0,
                          "endRowIndex": 3,
                          "startColumnIndex": 0,
                          "endColumnIndex": 1,
                          "sheetId": SOURCE_SHEET_ID
                        },
                        {
                          "startRowIndex": 5,
                          "endRowIndex": 7,
                          "startColumnIndex": 0,
                          "endColumnIndex": 1,
                          "sheetId": SOURCE_SHEET_ID
                        }
                      ]
                    }
                  }
                }
              ],
              "series": [
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "startRowIndex": 0,
                          "endRowIndex": 3,
                          "startColumnIndex": 1,
                          "endColumnIndex": 2,
                          "sheetId": SOURCE_SHEET_ID
                        },
                        {
                          "startRowIndex": 5,
                          "endRowIndex": 7,
                          "startColumnIndex": 1,
                          "endColumnIndex": 2,
                          "sheetId": SOURCE_SHEET_ID
                        }
                      ]
                    }
                  }
                }
              ]
            }
          },
          "position": {
            "overlayPosition": {
              "anchorCell": {
                "sheetId": SOURCE_SHEET_ID,
                "rowIndex": 8,
                "columnIndex": 8
              }
            }
          }
        }
      }
    }
  ]
}

Żądanie utworzy wykres w nowym arkuszu, np. w ten sposób:

Dodawanie wykresu liniowego z zakresem niesąsiadującym
wynik

Usuwanie wykresu

Poniższy przykładowy kod spreadsheets.batchUpdate pokazuje, jak za pomocą metody DeleteEmbeddedObjectRequest usunąć wykres określony przez parametr CHART_ID.

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "deleteEmbeddedObject": {
        "objectId": CHART_ID
      }
    }
  ]
}

Edytowanie właściwości wykresu

Poniższy przykładowy kodspreadsheets.batchUpdate pokazuje, jak używaćUpdateChartSpecRequest do edytowania wykresu utworzonego w przepisie Dodawanie wykresu kolumnowego, modyfikując jego dane, typ i wygląd. Nie można zmieniać poszczególnych podzbiorów właściwości wykresu. Aby wprowadzić zmiany, musisz podać całe pole spec z wartością UpdateChartSpecRequest. Edytowanie specyfikacji wykresu wymaga zastąpienia jej nową.

Poniższe żądanie aktualizuje pierwotny wykres (określony przez CHART_ID):

  • Ustawia typ wykresu na BAR.
  • Przenosi legendę na prawą stronę wykresu.
  • Odwraca osie, tak aby „Sprzedaż” znajdowała się na osi dolnej, a „Numery modeli” na osi lewej.
  • Ustawia format nazwy osi na czcionkę o rozmiarze 24 punktów, pogrubioną i pochyloną.
  • Usuwa z wykresu dane „W-24” (wiersz 7 w źródle danych wykresu).

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateChartSpec": {
        "chartId": CHART_ID,
        "spec": {
          "title": "Model Q1 Sales",
          "basicChart": {
            "chartType": "BAR",
            "legendPosition": "RIGHT_LEGEND",
            "axis": [
              {
                "format": {
                  "bold": true,
                  "italic": true,
                  "fontSize": 24
                },
                "position": "BOTTOM_AXIS",
                "title": "Sales"
              },
              {
                "format": {
                  "bold": true,
                  "italic": true,
                  "fontSize": 24
                },
                "position": "LEFT_AXIS",
                "title": "Model Numbers"
              }
            ],
            "domains": [
              {
                "domain": {
                  "sourceRange": {
                    "sources": [
                      {
                        "sheetId": SOURCE_SHEET_ID,
                        "startRowIndex": 0,
                        "endRowIndex": 6,
                        "startColumnIndex": 0,
                        "endColumnIndex": 1
                      }
                    ]
                  }
                }
              }
            ],
            "series": [
              {
                "series": {
                  "sourceRange": {
                    "sources": [
                      {
                        "sheetId": SOURCE_SHEET_ID,
                        "startRowIndex": 0,
                        "endRowIndex": 6,
                        "startColumnIndex": 1,
                        "endColumnIndex": 2
                      }
                    ]
                  }
                },
                "targetAxis": "BOTTOM_AXIS"
              },
              {
                "series": {
                  "sourceRange": {
                    "sources": [
                      {
                        "sheetId": SOURCE_SHEET_ID,
                        "startRowIndex": 0,
                        "endRowIndex": 6,
                        "startColumnIndex": 2,
                        "endColumnIndex": 3
                      }
                    ]
                  }
                },
                "targetAxis": "BOTTOM_AXIS"
              },
              {
                "series": {
                  "sourceRange": {
                    "sources": [
                      {
                        "sheetId": SOURCE_SHEET_ID,
                        "startRowIndex": 0,
                        "endRowIndex": 6,
                        "startColumnIndex": 3,
                        "endColumnIndex": 4
                      }
                    ]
                  }
                },
                "targetAxis": "BOTTOM_AXIS"
              }
            ],
            "headerCount": 1
          }
        }
      }
    }
  ]
}

Po wysłaniu żądania wykres będzie wyglądać tak:

Edytowanie wyniku przepisu na wykres

Przenoszenie wykresu i zmienianie jego rozmiaru

Poniższy przykładowy kod spreadsheets.batchUpdate pokazuje, jak używać metody UpdateEmbeddedObjectPositionRequest do przenoszenia i zmiany rozmiaru wykresu. Po przesłaniu żądania wykres określony przez CHART_ID:

  • Zakotwiczony w komórce A5 oryginalnego arkusza.
  • Odsunięcie w kierunku osi X o 100 pikseli.
  • Zmieniony rozmiar na 1200 x 742 piksele (domyślny rozmiar wykresu to 600 x 371 pikseli).

Żądanie zmienia tylko te właściwości, które są określone za pomocą parametru fields. Pozostałe właściwości (np. offsetYPixels) zachowują swoje pierwotne wartości.

Protokół żądania jest widoczny poniżej.

POST https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID:batchUpdate
{
  "requests": [
    {
      "updateEmbeddedObjectPosition": {
        "objectId": CHART_ID,
        "newPosition": {
          "overlayPosition": {
            "anchorCell": {
              "rowIndex": 4,
              "columnIndex": 0
            },
            "offsetXPixels": 100,
            "widthPixels": 1200,
            "heightPixels": 742
          }
        },
        "fields": "anchorCell(rowIndex,columnIndex),offsetXPixels,widthPixels,heightPixels"
      }
    }
  ]
}

Odczytywanie danych wykresu

Poniższy przykładowy kodspreadsheets.get pokazuje, jak pobrać dane wykresu z arkusza kalkulacyjnego. Parametr zapytania fields określa, że mają być zwracane tylko dane wykresu.

Odpowiedzią na to wywołanie metody jest obiekt spreadsheet, który zawiera tablicę obiektów sheet. Wszystkie wykresy znajdujące się w arkuszu są reprezentowane w obiekcie sheet. Jeśli pole odpowiedzi ma wartość domyślną, jest pomijane w odpowiedzi.

W tym przykładzie pierwszy arkusz (SOURCE_SHEET_ID) nie zawiera żadnych wykresów, więc zwracana jest pusta para nawiasów klamrowych. Drugi arkusz zawiera wykres utworzony za pomocą funkcji Dodaj wykres kolumnowy i nic więcej.

Protokół żądania jest widoczny poniżej.

GET https://sheets.googleapis.com/v4/spreadsheets/SPREADSHEET_ID?fields=sheets(charts)
{
  "sheets": [
    {},
    {
      "charts": [
        {
          "chartId": CHART_ID,
          "position": {
            "sheetId": SHEET_ID
          },
          "spec": {
            "basicChart": {
              "axis": [
                {
                  "format": {
                    "bold": false,
                    "italic": false
                  },
                  "position": "BOTTOM_AXIS",
                  "title": "Model Numbers"
                },
                {
                  "format": {
                    "bold": false,
                    "italic": false
                  },
                  "position": "LEFT_AXIS",
                  "title": "Sales"
                }
              ],
              "chartType": "COLUMN",
              "domains": [
                {
                  "domain": {
                    "sourceRange": {
                      "sources": [
                        {
                          "endColumnIndex": 1
                          "endRowIndex": 7,
                          "sheetId": SOURCE_SHEET_ID,
                          "startColumnIndex": 0,
                          "startRowIndex": 0,
                        }
                      ]
                    }
                  }
                }
              ],
              "legendPosition": "BOTTOM_LEGEND",
              "series": [
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "endColumnIndex": 2,
                          "endRowIndex": 7,
                          "sheetId": SOURCE_SHEET_ID,
                          "startColumnIndex": 1,
                          "startRowIndex": 0,
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                },
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "endColumnIndex": 3,
                          "endRowIndex": 7,
                          "sheetId": SOURCE_SHEET_ID,
                          "startColumnIndex": 2,
                          "startRowIndex": 0,
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                },
                {
                  "series": {
                    "sourceRange": {
                      "sources": [
                        {
                          "endColumnIndex": 4,
                          "endRowIndex": 7,
                          "sheetId": SOURCE_SHEET_ID,
                          "startColumnIndex": 3,
                          "startRowIndex": 0,
                        }
                      ]
                    }
                  },
                  "targetAxis": "LEFT_AXIS"
                }
              ]
            },
            "hiddenDimensionStrategy": "SKIP_HIDDEN_ROWS_AND_COLUMNS",
            "title": "Model Q1 Sales",
          },
        }
      ]
    }
  ]
}