Migrar desde la API de Hojas de cálculo v3

Si tienes apps existentes basadas en la API de Hojas de cálculo de Google v3, puedes migrar a la API de Google Sheets v4. La versión 4 se basa en JSON, tiene una interfaz más fácil de usar y agrega una cantidad considerable de funcionalidades que no son posibles en la versión 3.

En esta página, se proporciona una correspondencia entre los comandos anteriores de la API de Hojas de cálculo v3 y sus operaciones equivalentes en la API de Hojas de cálculo v4. La asignación se centra en gran medida en la colección spreadsheets.values, que proporciona la funcionalidad directa de lectura y escritura de celdas. La colección hojas de cálculo administra otros aspectos, como agregar hojas o actualizar sus propiedades. Ten en cuenta que las estructuras JSON de la API v4 no son retrocompatibles con las estructuras XML usadas en v3.

Para obtener más información sobre los recursos disponibles en la API de Hojas de cálculo v4, consulta la Referencia de la API.

Notación y términos

La API v3 se refiere a las hojas dentro de una hoja de cálculo en particular como “hojas de trabajo”. Es sinónimo del término “hojas de cálculo” que usa la API v4.

A menudo, las APIs requieren que especifiques un ID de hoja de cálculo correspondiente a la hoja de cálculo en la que estás trabajando. También requieren el ID de la hoja que se está manipulando. Estos valores aparecen como parte de la URL del extremo de la API, como parámetros de consulta o como parte del cuerpo de la solicitud. En esta página, los marcadores de posición spreadsheetId y sheetId hacen referencia a los ID de la hoja de cálculo y la hoja, respectivamente. Cuando uses los métodos descritos en esta página, sustitúyelos en los IDs reales en estas ubicaciones.

La API v3 también asigna un ID a las filas recuperadas con su feed de lista; esto se representa en esta página con el marcador de posición rowId.

Autoriza solicitudes

Cuando se ejecuta tu app, les solicita a los usuarios que otorguen ciertos permisos. Los permisos que especifiques en la aplicación determinan qué permisos solicitará.

API v3

La API de Hojas de cálculo v3 funciona con un único alcance de autorización:

https://spreadsheets.google.com/feeds

que es un alias del

https://www.googleapis.com/auth/spreadsheets

Se puede usar cualquiera de los formatos del alcance.

API v4

La API de Hojas de cálculo v4 usa uno o más de los siguientes conjuntos de alcances:

https://www.googleapis.com/auth/spreadsheets.readonly
https://www.googleapis.com/auth/spreadsheets
https://www.googleapis.com/auth/drive.readonly
https://www.googleapis.com/auth/drive

Usa alcances de solo lectura si tu aplicación no necesita realizar ediciones en las hojas o las propiedades de las hojas de un usuario. Usa permisos de hojas de cálculo en lugar de permisos de Drive si la aplicación no necesita acceso general a Drive.

Visibilidad

En versiones anteriores de la API, el término visibilidad se usa para referirse a la disponibilidad de una hoja de cálculo determinada.

API v3

La API de Hojas de cálculo v3 expresa la visibilidad directamente en sus endpoints. Una hoja de cálculo public se “publicó en la Web”, por lo que la API puede acceder a ella sin autorización, mientras que una hoja de cálculo private requiere autenticación. La visibilidad se especifica en el extremo después del ID de la hoja de cálculo:

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

API v4

En la nueva API de Hojas de cálculo v4, no hay una declaración explícita de visibilidad. Las llamadas a la API se realizan mediante los ID de la hoja de cálculo. Se mostrará un error si la aplicación no tiene permiso para acceder a la hoja de cálculo especificada. De lo contrario, la llamada continúa.

Proyección

En la versión 3 de la API de Hojas de cálculo, se usa el término proyección para referirse al conjunto de datos que muestra una llamada a la API determinada, ya sea todos ellos o un subconjunto fijo definido dentro de la API. La API de Hojas de cálculo v4 no utiliza proyección. En su lugar, te permite tener un mayor control sobre los datos que se muestran.

API v3

Solo hay dos posibles configuraciones de proyección en la API de Hojas de cálculo v3. La proyección full muestra toda la información disponible, mientras que basic muestra un subconjunto de datos más pequeño y fijo (para los feeds de hojas de cálculo, lista y celdas). Al igual que la visibilidad, la proyección debe especificarse en el extremo de la API (después de la configuración de visibilidad):

https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/public/basic

El subconjunto más pequeño de datos que proporciona la proyección basic es valioso para hacer que el código sea más eficiente, pero no se puede personalizar.

API v4

Si bien la API de Hojas de cálculo v4 puede mostrar un conjunto de datos completo, no define subconjuntos fijos análogos a la configuración de visibilidad de basic de la API de Hojas de cálculo v3. Los métodos de la colección hoja de cálculo restringen la cantidad de datos que muestran mediante un parámetro de consulta de campos.

Por ejemplo, la siguiente consulta solo muestra los títulos de todas las hojas en una hoja de cálculo en particular:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?fields=sheets.properties.title

Crear una hoja de cálculo

API v3

La API de Hojas de cálculo v3 no proporciona un medio para crear hojas de cálculo nuevas. En su lugar, se puede usar el método Files.create de la API de Drive para crear nuevos archivos de hojas de cálculo. Esto requiere que la aplicación declare el alcance https://www.googleapis.com/auth/drive.

API v4

El método Files.create de la API de Drive también se puede usar con la API de Hojas de cálculo v4, pero requiere que la aplicación proporcione el alcance https://www.googleapis.com/auth/drive.

Como alternativa equivalente, la API de Hojas de cálculo v4 proporciona un método spreadsheets.create, que también puede agregar hojas de manera opcional, establecer las propiedades de la hoja de cálculo y de la hoja, y agregar rangos con nombre. Por ejemplo, lo siguiente crea una nueva hoja de cálculo y le da el nombre "NewTitle":

POST https://sheets.googleapis.com/v4/spreadsheets
{
 "properties": {"title": "NewTitle"}
}

Obtén una lista de las hojas de cálculo del usuario autenticado

API v3

El feed de la API de Hojas de cálculo v3 permite que una aplicación recupere una lista de todas las hojas de cálculo a las que puede acceder el usuario autenticado. El extremo del feed de la hoja de cálculo es:

GET https://spreadsheets.google.com/feeds/spreadsheets/private/full

API v4

La API de Hojas de cálculo v4 no proporciona esta operación específica. Te recomendamos que migres tu app para usar el alcance drive.file en combinación con el selector de Google para seleccionar hojas de cálculo.

En los casos en que sea obligatorio mostrar una hoja de cálculo, esta se puede replicar a través del método Files.list de la API de Drive mediante una consulta mimeType:

GET https://www.googleapis.com/drive/v3/files
             ?q=mimeType='application/vnd.google-apps.spreadsheet'

Usar el método files.list de la API de Drive para crear una lista de todas las hojas de cálculo de un usuario requiere un alcance restringido.

Recuperar metadatos de hojas

La API de Hojas de cálculo v3 proporciona un feed para acceder a los metadatos de la hoja que se encuentran en una hoja de cálculo determinada (se accede a los datos de las filas y celdas desde otro feed). Los metadatos incluyen información como los títulos y el tamaño de la hoja.

El método spreadsheets.get de la API de Hojas de cálculo v4 proporciona acceso a esta información y mucho más.

API v3

Se puede acceder al feed de hojas de cálculo desde este extremo de API (con el encabezado de autorización adecuado):

GET https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full

La respuesta a esta solicitud tiene una estructura similar a la siguiente, con los datos de cada hoja en un <entry> separado:

<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006"
    xmlns:gd="http://schemas.google.com/g/2005"
    gd:etag='W/"D0cERnk-eip7ImA9WBBXGEg."'>
  <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <title type="text">Groceries R Us</title>
  <link rel="alternate" type="text/html"
      href="https://spreadsheets.google.com/ccc?key=spreadsheetId"/>
  <link rel="http://schemas.google.com/g/2005#feed"
      type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <link rel="http://schemas.google.com/g/2005#post" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full"/>
  <author>
    <name>Fitzwilliam Darcy</name>
    <email>fitz@example.com</email>
  </author>
  <openSearch:totalResults>1</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>1</openSearch:itemsPerPage>
  <entry gd:etag='"YDwqeyI."'>
    <id>https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId</id>
    <updated>2006-11-17T18:23:45.173Z</updated>
    <title type="text">Sheet1</title>
    <content type="text">Sheet1</content>
    <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
    <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
        type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
    <link rel="self" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
    <link rel="edit" type="application/atom+xml"
        href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
    <gs:rowCount>100</gs:rowCount>
    <gs:colCount>20</gs:colCount>
  </entry>
</feed>

API v4

El método spreadsheets.get se puede usar para obtener las propiedades de la hoja y otros metadatos, mucho más de lo que está disponible en la API de Hojas de cálculo v3. Si solo deseas leer las propiedades de la hoja, establece el parámetro de consulta includeGridData en false para evitar que se incluyan los datos de las celdas de la hoja de cálculo:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId?includeGridData=false

La respuesta Spreadsheet contiene un array de objetos Sheet. Los títulos de las hojas y la información sobre el tamaño se pueden encontrar específicamente en el elemento SheetProperties de estos objetos. Por ejemplo:

{
  "spreadsheetId": spreadsheetId,
  "sheets": [
      {"properties": {
          "sheetId": sheetId,
          "title": "Sheet1",
          "index": 0,
          "gridProperties": {
              "rowCount": 100,
              "columnCount": 20,
              "frozenRowCount": 1,
              "frozenColumnCount": 0,
              "hideGridlines": false
          },
          ...
       },
       ...
      },
      ...
  ],
  ...
}

Cómo agregar una hoja a una hoja de cálculo

Ambas API te permiten agregar nuevas hojas a una hoja de cálculo existente.

API v3

La API de Hojas de cálculo v3 puede agregar hojas de cálculo nuevas a una hoja de cálculo mediante la siguiente solicitud POST (autenticada). Puedes especificar el tamaño de la hoja nueva:

POST https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full
<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <title>Expenses</title>
  <gs:rowCount>50</gs:rowCount>
  <gs:colCount>10</gs:colCount>
</entry>

API v4

Puedes agregar hojas nuevas mediante una solicitud AddSheet en el método spreadsheets.batchUpdate. En el cuerpo de la solicitud, puedes especificar las propiedades de la hoja nueva; todas las propiedades son opcionales. Es un error proporcionar un título que se utiliza para una hoja existente.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [{
      "addSheet": {
          "properties": {
            "title": "Expenses",
            "sheetType": "GRID",
            "gridProperties": {
              "rowCount": 50,
              "columnCount": 10
            }
          }
      }
  }],
}

Cambiar el título y tamaño de una hoja

La API de Hojas de cálculo v3 te permite actualizar los títulos y el tamaño de las hojas. La API de Hojas de cálculo v4 también lo permite, pero también se puede usar para actualizar otras propiedades de la hoja. Ten en cuenta que si reduces el tamaño de una hoja, es posible que se borren los datos de las celdas recortadas sin previo aviso.

API v3

Para cambiar el título o el tamaño de una hoja de cálculo, primero recupera el feed de la hoja de trabajo y busca la entrada de hoja de trabajo deseada, que contiene una URL edit. Actualiza los metadatos de la hoja de cálculo y envíalos como cuerpo de una solicitud PUT a la URL de edición. Por ejemplo:

PUT https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version
<entry>
  <id>
    https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId
  </id>
  <updated>2007-07-30T18:51:30.666Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#worksheet"/>
  <title type="text">Expenses</title>
  <content type="text">Expenses</content>
  <link rel="http://schemas.google.com/spreadsheets/2006#listfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full"/>
  <link rel="http://schemas.google.com/spreadsheets/2006#cellsfeed"
    type="application/atom+xml" href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full"/>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version"/>
  <gs:rowCount>45</gs:rowCount>
  <gs:colCount>15</gs:colCount>
</entry>

API v4

Para actualizar el tamaño, el título y otras propiedades de la hoja, realiza una solicitud updateSheetProperties en el método spreadsheets.batchUpdate. El cuerpo de la solicitud POST debe contener las propiedades que se cambiarán, y el parámetro fields debe enumerar explícitamente esas propiedades (si deseas actualizar todas las propiedades, usa fields:"*" como abreviatura para enumerarlas todas). Por ejemplo, lo siguiente especifica que se deben actualizar las propiedades de título y tamaño de la hoja con el ID dado:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "updateSheetProperties": {
          "properties": {
            "sheetId": sheetId,
            "title": "Expenses",
            "gridProperties": {
              "rowCount": 45,
              "columnCount": 15,
            }
          },
          "fields": "title,gridProperties(rowCount,columnCount)"
     }
   }
  ],
}

Para recuperar el sheetId de una hoja, usa el método spreadsheets.get de la hoja de cálculo.

Cómo borrar una hoja

Ambas API pueden quitar hojas de una hoja de cálculo determinada.

API v3

Para borrar una hoja de cálculo, primero recupera el feed de la hoja de trabajo y, luego, envía una solicitud DELETE en la URL edit de la entrada de la hoja de cálculo de destino.

DELETE https://spreadsheets.google.com/feeds/worksheets/spreadsheetId/private/full/sheetId/version

API v4

Para borrar una hoja, realiza una solicitud DeleteSheet en el método spreadsheets.batchUpdate. El cuerpo de la solicitud POST solo debe contener el sheetId de la hoja que se borrará. Por ejemplo:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteSheet": {
        "sheetId": sheetId
      }
    }
  ],
}

Para recuperar el sheetId de una hoja individual, usa el método spreadsheets.get de la hoja de cálculo.

Cómo recuperar datos de filas

El feed de filas de lista es uno de los dos métodos que proporciona la API de Hojas de cálculo v3 para acceder a los datos dentro de las celdas de una hoja de cálculo (el otro es el feed de celdas). El feed de filas está diseñado para admitir operaciones comunes de hojas de cálculo (leer fila por fila, agregar filas, ordenar), pero realiza ciertas suposiciones que lo hacen inadecuado para algunas tareas. Específicamente, el feed de lista supone que las filas en blanco corresponden a cierres del feed y que los encabezados obligatorios están presentes en la primera fila de una hoja.

Por el contrario, la API de Hojas de cálculo v4 no usa métodos de acceso específicos de filas. En su lugar, se puede acceder a los datos de las celdas de la hoja haciendo referencia a los rangos específicos requeridos con la notación A1. Los rangos pueden ser bloques de celdas, filas enteras, columnas enteras, o bien hojas enteras. La API también puede acceder a conjuntos de celdas inconexos.

API v3

Para determinar la URL de un feed basado en listas para una hoja de cálculo determinada, recupera el feed de la hoja de cálculo y busca la URL del feed de lista en la entrada de la hoja de trabajo en cuestión.

Para recuperar un feed basado en listas, envía una solicitud GET a la URL del feed de lista con un encabezado de autorización adecuado. Por ejemplo:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

Entre otras cosas, la respuesta a esta solicitud contiene entradas que corresponden a filas específicas. Se hace referencia a celdas individuales mediante los nombres proporcionados en la fila de encabezado (obligatorio) de la hoja. Por ejemplo, esta es una sola entrada de fila:

<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
      term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>10</gsx:hours>
  <gsx:items>2</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

De forma predeterminada, las filas mostradas en el feed de lista se muestran en orden de fila. La API de Hojas de cálculo v3 proporciona parámetros de consulta para cambiar ese orden.

Orden inverso:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full?reverse=true

Ordena según una columna específica:

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?orderby=column:lastname

La API de Hojas de cálculo v3 también permite filtrar filas específicas mediante una consulta estructurada (por los encabezados de las columnas):

GET https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full
             ?sq=age>25%20and%20height<175

API v4

En la API de Hojas de cálculo v4, las filas se pueden recuperar por rango con los métodos spreadsheets.values.get o spreadsheets.values.batchGet. Por ejemplo, lo siguiente muestra todas las filas de “Sheet1”:

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1

La respuesta a esta solicitud tiene una estructura similar a la siguiente:

{
  "range": "Sheet1",
  "majorDimension": "ROWS",
  "values": [["Name", "Hours", "Items", "IPM"],
             ["Bingley", "10", "2", "0.0033"],
             ["Darcy", "14", "6", "0.0071"]]
}

Las celdas vacías finales no se incluyen en la respuesta cuando se recuperan filas, hojas o columnas completas.

La API de Hojas de cálculo v4 no tiene equivalentes para los parámetros de consulta de orden de filas proporcionados por la API de Hojas de cálculo v3. No tiene sentido ordenar las filas de forma inversa; solo debes procesar el array values que se muestra en el orden inverso. El orden por columna no es compatible con las lecturas, pero es posible ordenar los datos en la hoja (mediante una solicitud SortRange) y, luego, leerlos.

Actualmente, la API de Hojas de cálculo v4 no tiene un equivalente directo para las consultas estructuradas de la API de Hojas de cálculo v3. Sin embargo, puedes recuperar los datos relevantes y ordenarlos según sea necesario en tu aplicación.

Agregar una nueva fila de datos

Puedes usar cualquiera de las APIs para agregar una nueva fila de datos a una hoja.

API v3

Para determinar la URL de un feed basado en listas para una hoja de cálculo determinada, recupera el feed de la hoja de trabajo y busca la URL de la publicación en la entrada de la hoja de trabajo en cuestión.

Para agregar una fila de datos, envía una solicitud POST a la URL de la publicación con un encabezado de autorización adecuado. Por ejemplo:

POST https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full

El cuerpo de la solicitud POST debe contener una entrada para los datos de la fila que se agregarán y los encabezados de columna deben hacer referencia a celdas individuales:

<entry xmlns="http://www.w3.org/2005/Atom"
       xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended">
  <gsx:hours>2</gsx:hours>
  <gsx:ipm>0.5</gsx:ipm>
  <gsx:items>60</gsx:items>
  <gsx:name>Elizabeth</gsx:name>
</entry>

Las filas nuevas se agregan al final de la hoja especificada.

API v4

En la API de Hojas de cálculo v4, puedes agregar filas con el método spreadsheets.values.append. En el siguiente ejemplo, se escribe una nueva fila de datos debajo de la última tabla en “Sheet1” de la hoja de cálculo.

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/append/Sheet1

{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

Además, la API de Hojas de cálculo v4 te permite agregar celdas con propiedades y formato específicos mediante las solicitudes AppendCells en un spreadsheets.batchUpdate.

Editar una fila con datos nuevos

Ambas APIs permiten actualizar los datos de las filas con valores nuevos.

API v3

Para editar una fila de datos, examina el feed de lista para ubicar la entrada de la fila que deseas actualizar. Actualiza el contenido de esa entrada según sea necesario. Asegúrate de que el valor de ID de la entrada que uses coincida exactamente con el ID de la entrada existente.

Una vez que se haya actualizado la entrada, envía una solicitud PUT con la entrada como cuerpo de la solicitud a la URL edit proporcionada en esa entrada de fila con un encabezado de autorización adecuado. Por ejemplo:

PUT https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version
<entry gd:etag='"S0wCTlpIIip7ImA0X0QI"'>
  <id>rowId</id>
  <updated>2006-11-17T18:23:45.173Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#list"/>
  <title type="text">Bingley</title>
  <content type="text">Hours: 10, Items: 2, IPM: 0.0033</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version"/>
  <gsx:name>Bingley</gsx:name>
  <gsx:hours>20</gsx:hours>
  <gsx:items>4</gsx:items>
  <gsx:ipm>0.0033</gsx:ipm>
</entry>

API v4

Con la API de Hojas de cálculo v4, puedes editar una fila con la notación A1 de la fila que deseas editar y emitir una solicitud spreadsheets.values.update para reemplazar esa fila. El rango especificado solo necesita hacer referencia a la primera celda en la fila; la API infiere qué celdas se actualizarán en función de los valores proporcionados con la solicitud. En cambio, si especificas un rango de varias celdas, los valores que proporciones deben ajustarse a ese rango; de lo contrario, la API mostrará un error.

En el siguiente ejemplo, la solicitud y el cuerpo de la solicitud agregan datos a la cuarta fila de “Sheet1”:

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A4
{
   "values": [["Elizabeth", "2", "0.5", "60"]]
}

También puedes actualizar los datos de las filas con el método spreadsheet.values.batchUpdate. Resulta más eficiente usar este método si vas a actualizar varias filas o celdas.

Además, la API de Hojas de cálculo v4 te permite editar las propiedades y el formato de las celdas con las solicitudes UpdateCells o RepeatCell en un spreadsheets.batchUpdate.

Cómo borrar una fila

Ambas APIs admiten la eliminación de filas. La fila eliminada se quita de la hoja de cálculo y las filas inferiores suben una posición.

API v3

Para borrar una fila, primero recupérala del feed de lista y, luego, envía una solicitud DELETE a la URL edit proporcionada en la entrada de la fila. Esta es la misma URL que se utiliza para actualizar la fila.

DELETE https://spreadsheets.google.com/feeds/list/spreadsheetId/sheetId/private/full/rowId/version

Si deseas asegurarte de no borrar una fila que otro cliente cambió desde que la recuperaste, incluye un encabezado If-Match HTTP que contenga el valor ETag de la fila original. Para determinar el valor de ETag de la fila original, examina el atributo gd:etag del elemento de entrada.

Si deseas borrar la fila sin importar si alguien más la actualizó desde que la recuperaste, usa If-Match: * y no incluyas la ETag. (en este caso, no es necesario recuperar la fila antes de borrarla).

API v4

La eliminación de filas con la API de Hojas de cálculo v4 se controla mediante una llamada al método spreadsheet.batchUpdate, mediante una solicitud DeleteDimension. Esta solicitud también se puede usar para quitar columnas y desarrolladores, además de elegir quitar solo parte de una fila o columna. Por ejemplo, lo siguiente quita la sexta fila de una hoja con el ID determinado (los índices de fila se basan en cero, con startIndex incluido y endIndex exclusivo):

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId:batchUpdate
{
  "requests": [
    {
      "deleteDimension": {
        "range": {
          "sheetId": sheetId,
          "dimension": "ROWS",
          "startIndex": 5,
          "endIndex": 6
        }
      }
    }
  ],
}

El sheetId de una hoja se puede recuperar con el método spreadsheet.get.

Cómo recuperar datos de celdas

La API de Hojas de cálculo v3 proporciona un feed de celdas para obtener un acceso básico a todos los datos almacenados en una hoja de cálculo. Para el acceso de lectura, el feed de celdas puede proporcionar todo el contenido de la hoja o un rango de celdas definido por un conjunto de parámetros de consulta, pero solo como un bloque único. Los rangos inconexos deben recuperarse por separado mediante solicitudes GET adicionales.

La API de Hojas de cálculo v4 puede recuperar cualquier conjunto de datos de celdas de una hoja (incluidos varios rangos inconexos). La API de Hojas de cálculo v3 solo puede mostrar el contenido de las celdas como valores de entrada (tal como lo ingresaría un usuario con un teclado) o resultados de fórmulas (si son numéricos). La API de Hojas de cálculo v4 otorga acceso completo a los valores, las fórmulas, el formato, los hipervínculos, la validación de datos y otras propiedades.

API v3

Para determinar la URL de un feed basado en celdas correspondiente a una hoja de cálculo determinada, examina el feed de la hoja de trabajo y busca su URL en la entrada de la hoja de cálculo en cuestión.

Para recuperar un feed basado en celdas, envía una solicitud GET a la URL del feed de celdas con un encabezado de autorización adecuado. Por ejemplo:

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full

Para hacer referencia a las celdas, se usa el número de fila y columna. Para recuperar un solo rango específico, puedes usar los parámetros de consulta max-row, min-row, max-col y min-col. Por ejemplo, lo siguiente recupera todas las celdas de la columna 4 (D) a partir de la fila 2:

GET https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full
             ?min-row=2&min-col=4&max-col=4

La API de Hojas de cálculo v3 muestra el inputValue de las celdas recuperadas, el valor que un usuario escribiría en la interfaz de usuario de Hojas de cálculo de Google para manipular la celda. inputValue puede ser un valor literal o una fórmula. A veces, la API muestra un numericValue; por ejemplo, cuando una fórmula da como resultado un número. Por ejemplo, una respuesta puede incluir entradas en celdas con una estructura similar a la que se muestra a continuación:

<entry gd:etag='"ImB5CBYSRCp7"'>
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4</id>
  <updated>2006-11-17T18:27:32.543Z</updated>
  <category scheme="http://schemas.google.com/spreadsheets/2006"
    term="http://schemas.google.com/spreadsheets/2006#cell"/>
  <title type="text">D4</title>
  <content type="text">5</content>
  <link rel="self" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4"/>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R9C4/srevc"/>
  <gs:cell row="4" col="4" inputValue="=FLOOR(C4/(B4*60),.0001)"
    numericValue="5.0">5</gs:cell>
</entry>

API v4

Si quieres recuperar los datos de las celdas, llama a los métodos spreadsheets.values.get o spreadsheets.values.batchGet para los rangos de interés, respectivamente. Por ejemplo, a continuación se muestran las celdas de la columna D de “Sheet2”, comenzando por la fila 2, en orden de columna mayor y mostrando las fórmulas tal como se ingresaron (se omiten las celdas vacías finales):

GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet2!D2:D?majorDimension=COLUMNS&valueRenderOption=FORMULA

La respuesta a esta solicitud es similar en estructura a lo siguiente:

{
  "spreadsheetId": spreadsheetId,
  "valueRanges": [
      {"range": "Sheet2!D2:D",
       "majorDimension": "COLUMNS",
       "values": [["Widget", 234, "=FLOOR(C4/(B4*60),.0001)", "=D4\*1000"]]
      }]
}

Es más eficiente usar spreadsheet.values.batchGet si quieres recuperar varios rangos de datos de celdas. Si quieres acceder a las propiedades de las celdas, como su formato, es obligatorio usar el método spreadsheet.get.

Cómo editar una celda

La API de Hojas de cálculo v3 te permite editar el contenido de la celda mediante la emisión de un comando PUT al feed de celdas con la entrada de la celda modificada como el cuerpo de la solicitud.

En cambio, la API de Hojas de cálculo v4 proporciona los métodos spreadsheets.values.update y spreadsheets.values.batchUpdate para cambiar el contenido de las celdas.

API v3

Para editar el contenido de una sola celda, primero busca la entrada de la celda en el feed de celdas. La entrada contiene una URL de edición. Actualiza la entrada para que refleje el contenido que deseas que tenga la celda y, luego, emite una solicitud PUT a la URL de edición con la entrada de la celda actualizada como cuerpo de la solicitud. Por ejemplo, a continuación, se actualiza la celda D2 (R2C4) para que contenga una fórmula SUM:

PUT https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full//R2C4/srevc

<entry xmlns="http://www.w3.org/2005/Atom"
    xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
  <link rel="edit" type="application/atom+xml"
    href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4"/>
  <gs:cell row="2" col="4" inputValue="=SUM(A1:B6)"/>
</entry>

API v4

En la API de Hojas de cálculo v4, puedes editar una sola celda con el método spreadsheets.values.update. Este método requiere un parámetro de consulta ValueInputOption, que especifica si los datos de entrada se tratan como si se ingresaran en la IU de Hojas de cálculo (USER_ENTERED), o si se dejan sin analizar y se toman como están (RAW). Por ejemplo, lo siguiente actualiza la celda D2 con una fórmula:

PUT https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/D2?valueInputOption=USER_ENTERED
{"values": [["=SUM(A1:B6)"]]}

Si editas varias celdas, usa el método spreadsheets.values.batchUpdate para hacerlo en una sola solicitud.

Cómo editar varias celdas mediante una solicitud por lotes

Ambas APIs proporcionan los medios para realizar cambios en el contenido de varias celdas con una sola solicitud (por lotes). No es necesario que las celdas a las que se haga referencia en una solicitud por lotes estén en un rango contiguo.

En caso de que falle una o más modificaciones de las celdas en el lote, la API de Hojas de cálculo v3 permite que los demás se hagan correctamente. Sin embargo, la API de Hojas de cálculo v4 muestra un error si falla alguna de las actualizaciones por lotes, y no aplica ninguna de ellas en ese caso.

API v3

Para editar varias celdas, primero recupera un feed de celdas para la hoja de cálculo. La entrada contiene una URL por lotes. Envía una solicitud POST a esta URL, junto con un cuerpo de la solicitud que describa las celdas que deseas actualizar y su nuevo contenido. La solicitud POST y el cuerpo de la solicitud tienen una estructura similar a la siguiente:

POST https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/batch
<feed xmlns="http://www.w3.org/2005/Atom"
      xmlns:batch="http://schemas.google.com/gdata/batch"
      xmlns:gs="http://schemas.google.com/spreadsheets/2006">
  <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full</id>
  <entry>
    <batch:id>request1</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C4/version"/>
    <gs:cell row="2" col="4" inputValue="newData"/>
  </entry>
  ...
  <entry>
    <batch:id>request2</batch:id>
    <batch:operation type="update"/>
    <id>https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5</id>
    <link rel="edit" type="application/atom+xml"
      href="https://spreadsheets.google.com/feeds/cells/spreadsheetId/sheetId/private/full/R2C5/version"/>
    <gs:cell row="5" col="2" inputValue="moreInfo"/>
  </entry>
</feed>

El campo batch:id debe identificar de manera única la solicitud dentro del lote. El campo batch:operation debe ser update para las ediciones de las celdas. gs:cell identifica la celda por número de fila y columna, y proporciona los datos nuevos que se deben insertar allí. id contiene la URL completa de la celda que se actualizará. link debe tener un atributo href que contenga la ruta de acceso completa al ID de la celda. Todos estos campos son obligatorios para cada entrada.

API v4

La API de Hojas de cálculo v4 ofrece la edición por lotes de los valores de las celdas con el método spreadsheets.values.batchUpdate.

Para editar varias celdas, se puede emitir una solicitud POST con los cambios en los datos especificados en el cuerpo de la solicitud. Por ejemplo:

POST https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values:batchUpdate
{
  "valueInputOption": "USER_ENTERED"
  "data": [
       {"range": "D4",
        "majorDimension": "ROWS",
        "values": [["newData"]]
       },
       {"range": "B5",
        "majorDimension": "ROWS",
        "values": [["moreInfo"]]
       }
  ]
}

Si especificaste una sola celda como rango, todos los valores proporcionados se escriben en la hoja a partir de esa celda como la coordenada superior izquierda. En cambio, si especificas un rango de varias celdas, los valores que proporciones deben ajustarse exactamente a ese rango; de lo contrario, la API mostrará un error.