Entwicklermetadaten lesen und schreiben

Mit der Funktion für Entwicklermetadaten können Sie Metadaten mit verschiedenen Entitäten und Standorten in einer Tabelle verknüpfen. Sie können diese Metadaten dann abfragen und anhand der Ergebnisse die zugehörigen Objekte ermitteln.

Sie können Metadaten mit Zeilen, Spalten, Blättern oder einer Tabelle verknüpfen.

Mit Entwicklermetadaten können Sie unter anderem folgende Vorgänge ausführen:

  • Beliebige Daten mit verschiedenen Entitäten und Speicherorten in einer Tabelle verknüpfen, z. B. totals mit Spalte D oder responseId = 1234 mit Zeile 7.

  • Alle Speicherorte und Daten finden, die mit einem bestimmten Metadatenschlüssel oder ‑attribut verknüpft sind: Wenn Sie beispielsweise den Schlüssel totals angeben, der mit Spalte D verknüpft ist, oder responseId, werden alle Zeilen mit den Metadaten responseId und dem zugehörigen Metadatenwert zurückgegeben.

  • Alle Daten zu einer bestimmten Entität oder einem bestimmten Standort finden: Beispiel: In Spalte D werden alle Metadaten zurückgegeben, die mit diesem Standort verknüpft sind.

  • Werte an einem Speicherort abrufen, indem zugehörige Metadaten angegeben werden: Wenn Sie beispielsweise totals angeben, wird eine Darstellung der Werte in der zugehörigen Spalte oder Zeile zurückgegeben. Wenn Sie summary angeben, wird eine Darstellung der zugehörigen Tabellenressource zurückgegeben.

  • Werte an einem Speicherort durch Angabe der zugehörigen Metadaten aktualisieren: Anstatt die Werte in einer Zeile über die A1-Notation zu aktualisieren, können Sie sie auch durch Angabe einer Metadaten-ID aktualisieren.

Metadaten lesen und schreiben

Die Ressource spreadsheets.developerMetadata bietet Zugriff auf Entwicklermetadaten, die mit einem Standort oder Objekt in einer Tabelle verknüpft sind.

Entwicklermetadaten

In diesem Abschnitt werden einige wichtige Aspekte von Entwicklermetadaten beschrieben, die Sie bei der Arbeit mit der Google Tabellen API berücksichtigen sollten.

Metadaten als Tags

Eine Verwendung von Entwicklermetadaten ist ein Tag, das einen Standort in der Tabelle nur mit einem Schlüssel und einem Standort benennt. Sie können beispielsweise headerRow mit einer bestimmten Zeile oder totals mit einer bestimmten Spalte in einem Tabellenblatt verknüpfen. Mithilfe von Tags können Sie Teile einer Tabelle semantisch mit Feldern in einem Drittanbietertool oder einer Drittanbieterdatenbank verknüpfen, sodass Änderungen an der Tabelle Ihre App nicht beeinträchtigen.

Metadaten als Properties

Metadaten, die durch Angabe eines Schlüssels, eines Speicherorts und eines Werts erstellt werden, dienen als Schlüssel/Wert-Paar, das diesem Speicherort in einem Tabellenblatt zugeordnet ist. Sie können beispielsweise Folgendes verknüpfen:

  • formResponseId = resp123 mit einer Zeile
  • lastUpdated = 1477369882 mit einer Spalte.

So können Sie benutzerdefinierte benannte Properties speichern und auf diese zugreifen, die mit bestimmten Bereichen oder Daten in einer Tabelle verknüpft sind.

Sichtbare Metadaten für Projekte und Dokumente

Damit ein Entwicklerprojekt nicht die Metadaten eines anderen Projekts beeinträchtigt, gibt es zwei visibility-Metadateneinstellungen: project und document. Mit der Google Tabellen API sind Projektmetadaten nur im Entwicklerprojekt sichtbar und zugänglich, in dem sie erstellt wurden. Auf Dokumentmetadaten kann über jedes Entwicklerprojekt zugegriffen werden, das Zugriff auf das Dokument hat.

Bei Abfragen, für die keine Sichtbarkeit explizit angegeben ist, werden übereinstimmende Dokument- und Projektmetadaten für das Entwicklerprojekt zurückgegeben, das die Anfrage stellt.

Eindeutigkeit

Metadatenschlüssel müssen nicht eindeutig sein, aber die metadataId müssen unterschiedlich sein. Wenn Sie Metadaten erstellen und das ID-Feld leer lassen, wird es von der API zugewiesen. Mit dieser ID können die Metadaten identifiziert werden, während Schlüssel und andere Attribute zum Identifizieren von Metadatensätzen verwendet werden können.

Metadaten erstellen

Verwenden Sie zum Erstellen von Metadaten die Methode batchUpdate und geben Sie eine createDeveloperMetadataRequest mit metadataKey, location und visibility an. Optional können Sie metadataValue oder eine explizite metadataId angeben.

Wenn Sie eine ID angeben, die bereits verwendet wird, schlägt die Anfrage fehl. Wenn Sie keine ID angeben, wird eine von der API zugewiesen.

In diesem Beispiel geben wir in der Anfrage einen Schlüssel, einen Wert und eine Zeile an. Die Antwort enthält diese Entwicklermetadatenwerte sowie die zugewiesene Metadaten-ID.

Anfrage

{
  "requests": [
    {
      "createDeveloperMetadata": {
        "developerMetadata": {
          "location": {
            "dimensionRange": {
              "sheetId": sheetId,
              "dimension": "ROWS",
              "startIndex": 6,
              "endIndex": 7
            }
          },
          "visibility": "DOCUMENT",
          "metadataKey": "Sales",
          "metadataValue": "2022"
        }
      }
    }
  ]
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "replies": [
    {
      "createDeveloperMetadata": {
        "developerMetadata": {
          "metadataId": metadataId,
          "metadataKey": "Sales",
          "metadataValue": "2022",
          "location": {
            "locationType": "ROW",
            "dimensionRange": {
              "sheetId": sheetId,
              "dimension": "ROWS",
              "startIndex": 6,
              "endIndex": 7
            }
          },
          "visibility": "DOCUMENT"
        }
      }
    }
  ]
}

Einzelnes Metadatenelement lesen

Wenn Sie einzelne Entwicklermetadaten abrufen möchten, verwenden Sie die Methode spreadsheets.developerMetadata.get und geben Sie die spreadsheetId mit den Metadaten und die eindeutige metadataId der Entwicklermetadaten an.

Anfrage

In diesem Beispiel geben wir die Tabellen-ID und die Metadaten-ID in der Anfrage an. Die Antwort gibt die Entwicklermetadatenwerte für die Metadaten-ID zurück.

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/developerMetadata/metadataId

Antwort

{
  "metadataId": metadataId,
  "metadataKey": "Sales",
  "metadataValue": "2022",
  "location": {
    "locationType": "ROW",
    "dimensionRange": {
      "sheetId": sheetId,
      "dimension": "ROWS",
      "startIndex": 6,
      "endIndex": 7
    }
  },
  "visibility": "DOCUMENT"
}

Mehrere Metadatenelemente lesen

Wenn Sie mehrere Entwicklermetadatenelemente abrufen möchten, verwenden Sie die Methode spreadsheets.developerMetadata.search. Sie müssen einen DataFilter angeben, der mit allen vorhandenen Metadaten für eine beliebige Kombination von Eigenschaften wie Schlüssel, Wert, Standort oder Sichtbarkeit übereinstimmt.

In diesem Beispiel geben wir mehrere Metadaten-IDs in der Anfrage an. Die Antwort enthält die Entwicklermetadatenwerte für jede Metadaten-ID.

Anfrage

{
  "dataFilters": [
    {
      "developerMetadataLookup": {
        "metadataId": metadataId
      }
    },
    {
      "developerMetadataLookup": {
        "metadataId": metadataId
      }
    }
  ]
}

Antwort

{
  "matchedDeveloperMetadata": [
    {
      "developerMetadata": {
        "metadataId": metadataId,
        "metadataKey": "Revenue",
        "metadataValue": "2022",
        "location": {
          "locationType": "SHEET",
          "sheetId": sheetId
        },
        "visibility": "DOCUMENT"
      },
      "dataFilters": [
        {
          "developerMetadataLookup": {
            "metadataId": metadataId
          }
        }
      ]
    },
    {
      "developerMetadata": {
        "metadataId": metadataId,
        "metadataKey": "Sales",
        "metadataValue": "2022",
        "location": {
          "locationType": "SHEET",
          "sheetId": sheetId
        },
        "visibility": "DOCUMENT"
      },
      "dataFilters": [
        {
          "developerMetadataLookup": {
            "metadataId": metadataId
          }
        }
      ]
    }
  ]
}

Metadaten aktualisieren

Verwenden Sie zum Aktualisieren von Entwicklermetadaten die Methode spreadsheets.batchUpdate und geben Sie UpdateDeveloperMetadataRequest an. Sie müssen ein DataFilter angeben, das auf die zu aktualisierenden Metadaten ausgerichtet ist, ein DeveloperMetadata-Objekt mit den neuen Werten und eine Feldmaske, die die zu aktualisierenden Felder beschreibt.

In diesem Beispiel geben wir in der Anfrage die Metadaten-ID, die Tabellen-ID und einen neuen Metadatenschlüssel an. Die Antwort enthält diese Entwicklermetadatenwerte sowie den aktualisierten Metadatenschlüssel.

Anfrage

{
  "requests": [
    {
      "updateDeveloperMetadata": {
        "dataFilters": [
          {
            "developerMetadataLookup": {
              "metadataId": metadataId
            }
          }
        ],
        "developerMetadata": {
          "location": {
            "sheetId": sheetId
          },
          "metadataKey": "SalesUpdated"
        },
        "fields": "location,metadataKey"
      }
    }
  ]
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "replies": [
    {
      "updateDeveloperMetadata": {
        "developerMetadata": [
          {
            "metadataId": metadataId,
            "metadataKey": "SalesUpdated",
            "metadataValue": "2022",
            "location": {
              "locationType": "SHEET",
              "sheetId": sheetId
            },
            "visibility": "DOCUMENT"
          }
        ]
      }
    }
  ]
}

Metadaten löschen

Verwenden Sie die Methode batchUpdate und geben Sie eine DeleteDeveloperMetadataRequest an, um Entwicklermetadaten zu löschen. Sie müssen eine DataFilter angeben, um die Metadaten auszuwählen, die Sie löschen möchten.

In diesem Beispiel geben wir die Metadaten-ID in der Anfrage an. Die Antwort gibt die Entwicklermetadatenwerte für die Metadaten-ID zurück.

Verwenden Sie die Methode spreadsheets.developerMetadata.get, um zu prüfen, ob die Entwicklermetadaten entfernt wurden. Geben Sie dabei die gelöschte Metadaten-ID an. Sie sollten eine Antwort mit dem HTTP-Statuscode 404: Not Found und der Meldung „Keine Entwicklermetadaten mit der ID metadataId“ erhalten.

Anfrage

{
  "requests": [
    {
      "deleteDeveloperMetadata": {
        "dataFilter": {
          "developerMetadataLookup": {
            "metadataId": metadataId
          }
        }
      }
    }
  ]
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "replies": [
    {
      "deleteDeveloperMetadata": {
        "deletedDeveloperMetadata": [
          {
            "metadataId": metadataId,
            "metadataKey": "SalesUpdated",
            "metadataValue": "2022",
            "location": {
              "locationType": "SHEET",
              "sheetId": sheetId
            },
            "visibility": "DOCUMENT"
          }
        ]
      }
    }
  ]
}

Mit Metadaten verknüpfte Werte lesen und schreiben

Sie können auch Zellenwerte in Zeilen und Spalten abrufen und aktualisieren, indem Sie die zugehörigen Entwicklermetadaten und die Werte angeben, die Sie aktualisieren möchten. Verwenden Sie dazu eine der folgenden Methoden mit einer passenden DataFilter.

Zellenwerte anhand von Metadaten abrufen

Wenn Sie Zellenwerte nach Metadaten abrufen möchten, verwenden Sie die Methode spreadsheets.values.batchGetByDataFilter. Sie müssen die Tabellen-ID und einen oder mehrere Datenfilter angeben, die mit den Metadaten übereinstimmen.

In diesem Beispiel geben wir die Metadaten-ID in der Anfrage an. Die Antwort gibt die Werte der Zeilenzellen (Modellnummer, monatliche Verkäufe) für die Metadaten-ID zurück.

Anfrage

{
  "dataFilters": [
    {
      "developerMetadataLookup": {
        "metadataId": metadataId
      }
    }
  ],
  "majorDimension": "ROWS"
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "valueRanges": [
    {
      "valueRange": {
        "range": "Sheet7!A7:Z7",
        "majorDimension": "ROWS",
        "values": [
          [
            "W-24",
            "74"
          ]
        ]
      },
      "dataFilters": [
        {
          "developerMetadataLookup": {
            "metadataId": metadataId
          }
        }
      ]
    }
  ]
}

Tabelle anhand von Metadaten abrufen

Wenn Sie eine Tabelle abrufen, können Sie mit der Methode spreadsheets.getByDataFilter einen Teil der Daten zurückgeben. Sie müssen die Tabellen-ID und einen oder mehrere Datenfilter angeben, die mit den Metadaten übereinstimmen.

Diese Anfrage funktioniert wie eine normale GET-Anfrage für Tabellenblätter, mit der Ausnahme, dass anhand der Liste der Metadaten, die mit den angegebenen Datenfiltern übereinstimmen, bestimmt wird, welche Tabellen, Tabellendaten und anderen Objektressourcen mit Metadaten zurückgegeben werden. Wenn includeGridData auf „wahr“ gesetzt ist, werden auch Rasterdaten zurückgegeben, die sich mit den angegebenen Rasterbereichen überschneiden.

In diesem Beispiel geben wir die Metadaten-ID an und legen in der Anfrage fest, dass „includeGridData“ auf „false“ gesetzt werden soll. Die Antwort enthält sowohl die Tabellen- als auch die Tabelleneigenschaften.

Anfrage

{
  "dataFilters": [
    {
      "developerMetadataLookup": {
        "metadataId": metadataId
      }
    }
  ],
  "includeGridData": false
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "properties": {
    "title": "Sales Sheet",
    "locale": "en_US",
    "autoRecalc": "ON_CHANGE",
    "timeZone": "America/Los_Angeles",
    "defaultFormat": {
      "backgroundColor": {
        "red": 1,
        "green": 1,
        "blue": 1
      },
      "padding": {
        "top": 2,
        "right": 3,
        "bottom": 2,
        "left": 3
      },
      "verticalAlignment": "BOTTOM",
      "wrapStrategy": "OVERFLOW_CELL",
      "textFormat": {
        "foregroundColor": {},
        "fontFamily": "arial,sans,sans-serif",
        "fontSize": 10,
        "bold": false,
        "italic": false,
        "strikethrough": false,
        "underline": false,
        "foregroundColorStyle": {
          "rgbColor": {}
        }
      },
      "backgroundColorStyle": {
        "rgbColor": {
          "red": 1,
          "green": 1,
          "blue": 1
        }
      }
    },
    "spreadsheetTheme": {
      "primaryFontFamily": "Arial",
      "themeColors": [
        {
          "colorType": "TEXT",
          "color": {
            "rgbColor": {}
          }
        },
        {
          "colorType": "BACKGROUND",
          "color": {
            "rgbColor": {
              "red": 1,
              "green": 1,
              "blue": 1
            }
          }
        },
        {
          "colorType": "ACCENT1",
          "color": {
            "rgbColor": {
              "red": 0.25882354,
              "green": 0.52156866,
              "blue": 0.95686275
            }
          }
        },
        {
          "colorType": "ACCENT2",
          "color": {
            "rgbColor": {
              "red": 0.91764706,
              "green": 0.2627451,
              "blue": 0.20784314
            }
          }
        },
        {
          "colorType": "ACCENT3",
          "color": {
            "rgbColor": {
              "red": 0.9843137,
              "green": 0.7372549,
              "blue": 0.015686275
            }
          }
        },
        {
          "colorType": "ACCENT4",
          "color": {
            "rgbColor": {
              "red": 0.20392157,
              "green": 0.65882355,
              "blue": 0.3254902
            }
          }
        },
        {
          "colorType": "ACCENT5",
          "color": {
            "rgbColor": {
              "red": 1,
              "green": 0.42745098,
              "blue": 0.003921569
            }
          }
        },
        {
          "colorType": "ACCENT6",
          "color": {
            "rgbColor": {
              "red": 0.27450982,
              "green": 0.7411765,
              "blue": 0.7764706
            }
          }
        },
        {
          "colorType": "LINK",
          "color": {
            "rgbColor": {
              "red": 0.06666667,
              "green": 0.33333334,
              "blue": 0.8
            }
          }
        }
      ]
    }
  },
  "sheets": [
    {
      "properties": {
        "sheetId": sheetId,
        "title": "Sheet7",
        "index": 7,
        "sheetType": "GRID",
        "gridProperties": {
          "rowCount": 1000,
          "columnCount": 26
        }
      }
    }
  ],
  "spreadsheetUrl": spreadsheetUrl
}

Werte anhand von Metadaten aktualisieren

Wenn Sie Zellenwerte aktualisieren möchten, die bestimmten Metadaten entsprechen, verwenden Sie die Methode spreadsheets.values.batchUpdateByDataFilter. Sie müssen die Tabellen-ID, valueInputOption, und eine oder mehrere DataFilterValueRange angeben, die mit den Metadaten übereinstimmen.

In diesem Beispiel geben wir die Metadaten-ID und die aktualisierten Zeilenwerte in der Anfrage an. Die Antwort enthält sowohl die aktualisierten Properties als auch die Daten für die Metadaten-ID.

Anfrage

{
  "data": [
    {
      "dataFilter": {
        "developerMetadataLookup": {
          "metadataId": metadataId
        }
      },
      "majorDimension": "ROWS",
      "values": [
        [
          "W-24",
          "84"
        ]
      ]
    }
  ],
  "includeValuesInResponse": true,
  "valueInputOption": "USER_ENTERED"
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "totalUpdatedRows": 1,
  "totalUpdatedColumns": 2,
  "totalUpdatedCells": 2,
  "totalUpdatedSheets": 1,
  "responses": [
    {
      "updatedRange": "Sheet7!A7:B7",
      "updatedRows": 1,
      "updatedColumns": 2,
      "updatedCells": 2,
      "dataFilter": {
        "developerMetadataLookup": {
          "metadataId": metadataId
        }
      },
      "updatedData": {
        "range": "Sheet7!A7:Z7",
        "majorDimension": "ROWS",
        "values": [
          [
            "W-24",
            "84"
          ]
        ]
      }
    }
  ]
}

Werte nach Metadaten löschen

Wenn Sie Zellenwerte löschen möchten, die bestimmten Metadaten entsprechen, verwenden Sie die Methode spreadsheets.values.batchClearByDataFilter. Sie müssen einen Datenfilter angeben, um die Metadaten auszuwählen, die Sie löschen möchten.

Anfrage

In diesem Beispiel geben wir die Metadaten-ID in der Anfrage an. Die Antwort enthält die Tabellen-ID und die gelöschten Bereiche.

{
  "dataFilters": [
    {
      "developerMetadataLookup": {
        "metadataId": metadataId
      }
    }
  ]
}

Antwort

{
  "spreadsheetId": spreadsheetId,
  "clearedRanges": [
    "Sheet7!A7:Z7"
  ]
}

Limits für den Metadatenspeicher

Die Gesamtmenge der Metadaten, die Sie in einer Tabelle speichern können, ist begrenzt. Diese Grenze wird in Zeichen gemessen und besteht aus zwei Komponenten:

Element Zuweisung des Speicherlimits
Tabelle 30.000 Zeichen
Jedes Tabellenblatt in einer Tabelle 30.000 Zeichen

Sie können bis zu 30.000 Zeichen in der Tabelle speichern. Außerdem können Sie in jeder Tabelle einer Tabelle 30.000 Zeichen speichern (30.000 für Tabelle 1, 30.000 für Tabelle 2 usw.). Eine Tabelle mit drei Seiten kann also bis zu 120.000 Zeichen an Entwicklermetadaten enthalten.

Jedes Zeichen in den Schlüssel- und Wertattributen eines developerMetadata-Objekts wird auf dieses Limit angerechnet.