Lee y escribe metadatos del desarrollador

La función de metadatos del desarrollador te permite asociar metadatos con varias entidades y ubicaciones en una hoja de cálculo. Luego, puedes consultar estos metadatos y usarlos para buscar los objetos con los que están asociados.

Puedes asociar metadatos con filas, columnas, hojas o una hoja de cálculo.

Los metadatos del desarrollador te permiten realizar operaciones como las siguientes:

  • Asocia datos arbitrarios con varias entidades y ubicaciones en una hoja de cálculo. Por ejemplo, asocia totals con la columna D o responseId = 1234 con la fila 7.

  • Encuentra todas las ubicaciones y los datos asociados con un atributo o una clave de metadatos en particular: Por ejemplo, dada la clave totals asociada con la columna D o dada la responseId, muestra todas las filas con los metadatos responseId y el valor de metadatos asociado con ellas.

  • Encuentra todos los datos asociados con una entidad o ubicación en particular: Por ejemplo, en la columna D, muestra todos los metadatos asociados con esa ubicación.

  • Recupera valores en una ubicación mediante la especificación de metadatos asociados: Por ejemplo, dado que totals muestra una representación de los valores contenidos en la columna o fila asociada, o si se da una summary, se muestra una representación del recurso de hoja asociado.

  • Actualiza los valores de una ubicación mediante la especificación de metadatos asociados: Por ejemplo, en lugar de actualizar los valores de una fila con la notación A1, actualiza los valores indicando un ID de metadatos.

Lee y escribe metadatos

El recurso spreadsheets.developerMetadata proporciona acceso a los metadatos del desarrollador asociados con una ubicación o un objeto en una hoja de cálculo.

Información acerca de los metadatos del desarrollador

En esta sección, se describen algunos aspectos clave de los metadatos del desarrollador que debes tener en cuenta cuando trabajes con la API de Hojas de cálculo.

Metadatos como etiquetas

Uno de los usos de los metadatos del desarrollador es una etiqueta que nombra una ubicación en la hoja de cálculo usando solo una clave y una ubicación. Por ejemplo, puedes asociar headerRow con una fila en particular o totals con una columna específica dentro de una hoja. Las etiquetas se pueden usar para vincular de manera semántica partes de una hoja de cálculo a campos en una herramienta o base de datos de terceros, por lo que los cambios en la hoja de cálculo no dañarán tu app.

Metadatos como propiedades

Los metadatos que se crean con la especificación de una clave, una ubicación y un valor actúan como un par clave-valor asociado con esa ubicación en una hoja. Por ejemplo, puedes asociar lo siguiente:

  • formResponseId = resp123 con una fila
  • lastUpdated = 1477369882 por una columna.

Esto te permite almacenar propiedades con nombres personalizados asociadas con áreas o datos particulares en una hoja de cálculo y acceder a ellas.

Metadatos visibles del proyecto frente a los documentos

Para evitar que un proyecto de desarrollador interfiera con los metadatos de otro, hay 2 parámetros de configuración de visibility de metadatos: project y document. Con la API de Hojas de cálculo, los metadatos del proyecto solo son visibles y accesibles desde el proyecto de desarrollador que los creó. Se puede acceder a los metadatos de documentos desde cualquier proyecto de desarrollador que tenga acceso al documento.

Las consultas que no especifican de manera explícita una visibilidad muestran metadatos de documentos coincidentes y metadatos de proyectos coincidentes para el proyecto de desarrollador que realiza la solicitud.

Unicidad

No es necesario que las claves de metadatos sean únicas, pero el metadataId debe ser distinto. Si creas metadatos y dejas su campo de ID sin especificar, la API asigna uno. Este ID se puede usar para identificar los metadatos, mientras que las claves y otros atributos se pueden usar para identificar conjuntos de metadatos.

Crea metadatos

Para crear metadatos, usa el método batchUpdate y proporciona una createDeveloperMetadataRequest con metadataKey, location y visibility. De manera opcional, puedes especificar un metadataValue o un metadataId explícito.

Si especificas un ID que ya está en uso, no se realizará correctamente la solicitud. Si no proporcionas un ID, la API asigna uno.

Mostrar un ejemplo

En este ejemplo, proporcionamos una clave, un valor y una fila en la solicitud. La respuesta muestra estos valores de metadatos del desarrollador, más el ID de metadatos asignado.

Solicitud

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

Respuesta

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

Lee un solo elemento de metadatos

Para recuperar un único y distinto metadatos del desarrollador, usa el método spreadsheets.developerMetadata.get y especifica el spreadsheetId que contiene los metadatos y el metadataId único de los metadatos del desarrollador.

Mostrar un ejemplo

Solicitud

En este ejemplo, proporcionamos el ID de la hoja de cálculo y el ID de metadatos en la solicitud. La respuesta muestra los valores de metadatos del desarrollador para el ID de metadatos.

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

Respuesta

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

Lee varios elementos de metadatos

Para recuperar varios elementos de metadatos del desarrollador, usa el método spreadsheets.developerMetadata.search. Deberás especificar un DataFilter que coincida con los metadatos existentes en cualquier combinación de propiedades, como clave, valor, ubicación o visibilidad.

Mostrar un ejemplo

En este ejemplo, proporcionamos varios IDs de metadatos en la solicitud. La respuesta muestra los valores de metadatos del desarrollador para cada ID de metadatos.

Solicitud

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

Respuesta

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

Actualizar metadatos

Para actualizar los metadatos del desarrollador, usa el método spreadsheets.batchUpdate y proporciona un UpdateDeveloperMetadataRequest. Deberás especificar un DataFilter que tenga como objetivo los metadatos que se actualizarán, un objeto DeveloperMetadata con los valores nuevos y una máscara de campo que describa los campos que se actualizarán.

Mostrar un ejemplo

En este ejemplo, proporcionamos el ID de metadatos, el ID de hoja y una nueva clave de metadatos en la solicitud. La respuesta muestra estos valores de metadatos del desarrollador, además de la clave de metadatos actualizada.

Solicitud

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

Respuesta

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

Borrar metadatos

Para borrar metadatos del desarrollador, usa el método batchUpdate y proporciona una DeleteDeveloperMetadataRequest. Deberás especificar un DataFilter para seleccionar los metadatos que deseas borrar.

Mostrar un ejemplo

En este ejemplo, proporcionamos el ID de metadatos en la solicitud. La respuesta muestra los valores de metadatos del desarrollador para el ID de metadatos.

Para confirmar que se quitaron los metadatos del desarrollador, usa el método spreadsheets.developerMetadata.get y especifica el ID de metadatos borrados. Deberías recibir una respuesta de código de estado HTTP 404: Not Found con un mensaje que indique "No hay metadatos del desarrollador con el ID metadataId.

Solicitud

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

Respuesta

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

Lee y escribe valores asociados con metadatos

También puedes recuperar y actualizar valores de celdas en filas y columnas si especificas los metadatos del desarrollador asociados y los valores que deseas actualizar. Para ello, usa el método apropiado a continuación con un DataFilter coincidente.

Obtén valores de celdas por metadatos

Para obtener valores de celdas a través de metadatos, usa el método spreadsheets.values.batchGetByDataFilter. Deberás especificar el ID de la hoja de cálculo y uno o más filtros de datos que coincidan con los metadatos.

Mostrar un ejemplo

En este ejemplo, proporcionamos el ID de metadatos en la solicitud. La respuesta muestra los valores de las celdas de filas (número de modelo, ventas mensuales) para el ID de metadatos.

Solicitud

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

Respuesta

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

Obtener hoja de cálculo por metadatos

Cuando recuperes una hoja de cálculo, puedes mostrar un subconjunto de datos con el método spreadsheets.getByDataFilter. Deberás especificar el ID de la hoja de cálculo y uno o más filtros de datos que coincidan con los metadatos.

Esta solicitud funciona como una solicitud “GET de hoja de cálculo” normal, excepto que la lista de metadatos que coinciden con los filtros de datos especificados determina qué hojas, datos de cuadrícula y otros recursos de objeto con metadatos se muestran. Si includeGridData se establece en verdadero, los datos de cuadrícula que se cruzan con los rangos de cuadrícula especificados también se muestran para la hoja.

Mostrar un ejemplo

En este ejemplo, proporcionamos el ID de metadatos y configuramos includeGridData como falso en la solicitud. La respuesta muestra las propiedades de la hoja de cálculo y de la hoja.

Solicitud

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

Respuesta

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

Actualizar valores por metadatos

Para actualizar valores de celdas que coincidan con metadatos específicos, usa el método spreadsheets.values.batchUpdateByDataFilter. Deberás especificar el ID de la hoja de cálculo, valueInputOption, y uno o más DataFilterValueRange que coincidan con los metadatos.

Mostrar un ejemplo

En este ejemplo, proporcionamos el ID de metadatos y los valores de fila actualizados en la solicitud. La respuesta muestra las propiedades y los datos actualizados del ID de metadatos.

Solicitud

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

Respuesta

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

Borrar valores por metadatos

Para borrar los valores de celdas que coincidan con metadatos específicos, usa el método spreadsheets.values.batchClearByDataFilter. Debes especificar un filtro de datos para seleccionar los metadatos que deseas borrar.

Mostrar un ejemplo

Solicitud

En este ejemplo, proporcionamos el ID de metadatos en la solicitud. La respuesta muestra el ID de la hoja de cálculo y los rangos borrados.

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

Respuesta

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

Límites de almacenamiento de metadatos

Existe un límite para la cantidad total de metadatos que puedes almacenar en una hoja de cálculo. Este límite se mide en caracteres y tiene 2 componentes:

Elemento Asignación de límite de almacenamiento
Spreadsheet 30,000 caracteres
Cada hoja de una hoja de cálculo 30,000 caracteres

Puedes almacenar hasta 30,000 caracteres para la hoja de cálculo. Además, puedes almacenar 30,000 caracteres para cada hoja de una hoja de cálculo (30,000 para la hoja uno, 30,000 para la hoja 2, etc.). Por lo tanto, una hoja de cálculo con 3 páginas puede contener hasta 120,000 caracteres de metadatos del desarrollador.

Cada carácter de los atributos de clave y valor de un objeto developerMetadata se tienen en cuenta para este límite.