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 Hojas de cálculo de Google v4. La versión 4 se basa en JSON, tiene una interfaz más fácil de usar y agrega una cantidad considerable de funciones que no son posibles en la versión 3.

En esta página, se proporciona una asignación 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 principalmente en la colección spreadsheets.values, que proporciona funcionalidad directa de lectura y escritura de celdas. Otros aspectos, como agregar hojas o actualizar las propiedades de las hojas, se controlan con la colección spreadsheets. Ten en cuenta que las estructuras JSON de la API v4 no son retrocompatibles con las estructuras XML que se usan en la versión 3.

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" que usa la API v4.

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

La API de la versión 3 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 solicita se determinan según los alcances que especifiques en tu aplicación.

API de v3

La API de Sheets v3 opera con un solo alcance de autorización:

https://spreadsheets.google.com/feeds

que es un alias para

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

Se puede usar cualquiera de los dos formatos de alcance.

API de v4

La API de Sheets v4 usa uno o más de los siguientes conjuntos de permisos:

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 permisos de solo lectura si tu aplicación no necesita realizar ediciones en las hojas o en las propiedades de las hojas de un usuario. Usa los alcances de hojas de cálculo en lugar de los 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 hacer referencia a la disponibilidad de una hoja de cálculo determinada.

API de v3

La versión 3 de la API de Sheets expresa la visibilidad directamente en sus extremos. Una hoja de cálculo de public se "publicó en la Web" y, por lo tanto, se puede acceder a ella a través de la API sin autorización, mientras que una hoja de cálculo de 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 de 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 con IDs de hojas de cálculo. Si la aplicación no tiene permiso para acceder a la hoja de cálculo especificada, se mostrará un error. De lo contrario, la llamada continúa.

Proyección

La API de Hojas de cálculo v3 usa el término proyección para hacer referencia al conjunto de datos que devuelve una llamada a la API determinada, ya sea todo el conjunto o un subconjunto fijo definido dentro de la API. La API de Sheets v4 no usa proyecciones, sino que te permite tener más control sobre los datos que se devuelven.

API de v3

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

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

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

API de v4

Si bien la API de Sheets v4 puede devolver un conjunto de datos completo, no define subconjuntos fijos análogos al parámetro de configuración de visibilidad basic de la API de Sheets v3. Los métodos de la colección spreadsheet restringen la cantidad de datos que muestran a través del uso de un parámetro de consulta fields.

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

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

Crea una hoja de cálculo

API de v3

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

API de v4

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

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

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

Enumera las hojas de cálculo del usuario autenticado

API de v3

El feed de la API de Sheets 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 el siguiente:

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

API de v4

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

En los casos en los que se requiere enumerar hojas de cálculo, se puede replicar a través del método Files.list de la API de Drive, con una consulta mimeType:

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

Para enumerar todas las hojas de cálculo de un usuario con el método files.list de la API de Drive, se requiere un alcance restringido.

Recupera metadatos de hojas

La versión 3 de la API de Sheets proporciona un feed para acceder a los metadatos de la hoja incluidos en una hoja de cálculo determinada (se accede a los datos de filas y celdas a través de un feed independiente). Los metadatos incluyen información como los títulos y el tamaño de las hojas.

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

API de v3

Se puede acceder al feed de la hoja de cálculo desde este extremo de la API (con un 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 contenidos 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 de v4

El método spreadsheets.get se puede usar para adquirir propiedades de hojas y otros metadatos, mucho más de lo que está disponible con la API de Hojas de cálculo v3. Si solo deseas leer las propiedades de la hoja, configura el parámetro de consulta includeGridData como false para evitar la inclusión de 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 de 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 APIs te permiten agregar hojas nuevas a una hoja de cálculo existente.

API de v3

La API de Sheets v3 puede agregar hojas de cálculo nuevas a una hoja de cálculo realizando 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 de v4

Puedes agregar hojas nuevas con una solicitud AddSheet en el método spreadsheets.batchUpdate. Como parte del 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 use 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
            }
          }
      }
  }],
}

Cómo cambiar el título y el tamaño de una hoja

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

API de v3

Para cambiar el título o el tamaño de una hoja de cálculo, primero recupera el feed de la hoja de cálculo y busca la entrada de la hoja de cálculo deseada, que contiene una URL de edit. Actualiza los metadatos de la hoja de cálculo y envíalos como el 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 de 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, el siguiente código especifica que las propiedades de título y tamaño de la hoja se deben actualizar para la hoja con el ID determinado:

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

Cualquiera de las APIs puede quitar hojas de un archivo de hoja de cálculo determinado.

API de v3

Para borrar una hoja de cálculo, primero recupera el feed de la hoja de cálculo y, luego, envía una solicitud DELETE a 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 de v4

Para borrar una hoja, realiza una solicitud DeleteSheet en el método spreadsheets.batchUpdate. El cuerpo de la solicitud de 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 (lectura fila por fila, anexión de filas, ordenamiento), pero hace ciertas suposiciones que lo hacen inadecuado para algunas tareas. Específicamente, el feed de lista supone que las filas en blanco son terminaciones del feed y que los encabezados obligatorios están presentes en la primera fila de una hoja.

En cambio, la API de Sheets v4 no usa métodos de acceso específicos para cada fila. En cambio, se accede 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 completas, columnas completas o hojas completas. La API también puede acceder a conjuntos disjuntos de celdas.

API de 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 cálculo que te interese.

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

La respuesta a esta solicitud contiene, entre otras cosas, entradas correspondientes a filas específicas. Se hace referencia a las celdas individuales con los nombres proporcionados en la fila del encabezado de la hoja (obligatorio). Por ejemplo, aquí se muestra una entrada de una sola 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 que se muestran en el feed de lista se devuelven en orden de fila. La versión 3 de la API de Sheets proporciona parámetros de consulta para cambiar ese orden.

Orden inverso:

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

Ordenar por una columna específica:

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

La API de Sheets v3 también permite filtrar filas específicas a través de una consulta estructurada (a la que se hace referencia por los encabezados de columna):

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

API de v4

Con la API de Sheets v4, las filas se pueden recuperar por rango con los métodos spreadsheets.values.get o spreadsheets.values.batchGet. Por ejemplo, la siguiente fórmula devuelve todas las filas de "Hoja1":

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, columnas u hojas completas.

La API de Hojas de cálculo v4 no tiene equivalentes para los parámetros de consulta de orden de filas que proporciona la API de Hojas de cálculo v3. El orden inverso es trivial; simplemente procesa el array values devuelto en orden inverso. El orden por columna no se admite para las lecturas, pero es posible ordenar los datos en la hoja (con una solicitud de SortRange) y, luego, leerlos.

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

Agregar una nueva fila de datos

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

API de 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 de la publicación en la entrada de la hoja de cálculo que te interese.

Para agregar una fila de datos, envía una solicitud POST a la URL de 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á, con celdas individuales a las que se hace referencia por los encabezados de columna:

<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 de v4

Con la API de Sheets 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 de la "Hoja1" de una 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 Sheets v4 también te permite agregar celdas con propiedades y formato específicos a través de las solicitudes AppendCells en un spreadsheets.batchUpdate.

Edita una fila con datos nuevos

Ambas APIs permiten que los datos de las filas se actualicen con valores nuevos.

API de v3

Para editar una fila de datos, examina el feed de la 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 del ID en la entrada que uses coincida exactamente con el ID de la entrada existente.

Una vez que se actualizó 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 de v4

Con la API de Sheets v4, puedes editar una fila usando la notación A1 de la fila que deseas editar y enviando una solicitud spreadsheets.values.update para reemplazar esa fila. El rango especificado solo debe hacer referencia a la primera celda de la fila. La API infiere las celdas que se deben actualizar según los valores proporcionados con la solicitud. Si, en cambio, especificas un rango de varias celdas, los valores que proporciones deben ajustarse a ese rango. De lo contrario, la API devolverá un error.

En el siguiente ejemplo de solicitud y cuerpo de solicitud, se agregan datos a la cuarta fila de "Hoja1":

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. Es más eficiente usar este método si realizas varias actualizaciones de filas o celdas.

Además, la versión 4 de la API de Sheets también 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. Una fila borrada se quita de la hoja de cálculo, y las filas que se encuentran debajo se desplazan hacia arriba.

API de v3

Para borrar una fila, primero recupera la fila que deseas borrar del feed de lista y, luego, envía una solicitud DELETE a la URL de edit que se proporciona en la entrada de la fila. Esta es la misma URL que se usa para actualizar la fila.

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

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

Si deseas borrar la fila independientemente de si otra persona 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 de v4

El borrado de filas con la API de Hojas de cálculo v4 se controla con una llamada al método spreadsheet.batchUpdate, que usa una solicitud DeleteDimension. Esta solicitud también se puede usar para quitar columnas, y los desarrolladores pueden optar por quitar solo parte de una fila o columna. Por ejemplo, el siguiente código quita la 6ª fila de una hoja con el ID determinado (los índices de fila se basan en cero, con startIndex inclusivo 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.

Recupera datos de celdas

La API de Sheets v3 proporciona un feed de celdas para el 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 las celdas de la hoja definido por un conjunto de parámetros de consulta, pero solo como un solo bloque. Los rangos disjuntos se deben recuperar por separado con 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 no contiguos). La versión 3 de la API de Sheets solo puede devolver el contenido de las celdas como valores de entrada (como los ingresaría un usuario con un teclado) o los resultados de una fórmula (si son numéricos). La versión 4 de la API de Sheets otorga acceso completo a los valores, las fórmulas, el formato, los hipervínculos, la validación de datos y otras propiedades.

API de v3

Para determinar la URL de un feed basado en celdas para una hoja de cálculo determinada, examina el feed de la hoja de cálculo y busca la URL del feed de celdas en la entrada de la hoja de cálculo que te interese.

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

Las celdas se referencian con 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, la siguiente fórmula 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 Sheets v3 devuelve el inputValue de las celdas recuperadas, es decir, el valor que un usuario escribiría en la interfaz de usuario de Hojas de cálculo de Google para manipular la celda. El inputValue puede ser un valor literal o una fórmula. A veces, la API también devuelve un numericValue; por ejemplo, cuando una fórmula da como resultado un número. Por ejemplo, una respuesta puede incluir entradas de celdas con una estructura similar a la siguiente:

<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 de v4

Recupera los datos de las celdas llamando a un método spreadsheets.values.get o spreadsheets.values.batchGet para el rango o los rangos de interés, respectivamente. Por ejemplo, la siguiente fórmula devuelve las celdas de la columna D de "Hoja2", comenzando por la fila 2, en orden de columna principal y con 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 tiene una estructura similar a la 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 deseas recuperar varios rangos de datos de celdas. Si deseas acceder a las propiedades de las celdas, como el formato, se requiere el método spreadsheet.get.

Cómo editar una celda

La API de Hojas de cálculo v3 te permite editar el contenido de las celdas. Para ello, debes enviar un comando PUT al feed de celdas con la entrada de celda modificada como cuerpo de la solicitud.

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

API de 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, envía una solicitud PUT a la URL de edición con la entrada de celda actualizada como cuerpo de la solicitud. Por ejemplo, la siguiente instrucción 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 de v4

La edición de una sola celda en la API de Hojas de cálculo v4 se puede realizar 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 hubieran ingresado en la IU de Hojas de cálculo (USER_ENTERED) o si se dejan sin analizar y se toman tal como están (RAW). Por ejemplo, la siguiente acción 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 realizas varias ediciones de celdas, usa el método spreadsheets.values.batchUpdate para emitirlas en una sola solicitud.

Edita varias celdas a través de 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 hace referencia en una solicitud por lotes se encuentren en un rango contiguo.

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

API de v3

Para editar varias celdas, primero recupera un feed de celdas para la hoja de cálculo. La entrada contiene una URL de lote. Envía una solicitud POST a esta URL, junto con un cuerpo de solicitud que describa las celdas que deseas actualizar y el contenido nuevo de las celdas. La solicitud POST y su cuerpo 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 forma única la solicitud dentro del lote. El campo batch:operation debe ser update para las ediciones de celdas. gs:cell identifica la celda por el número de fila y columna, y proporciona los datos nuevos que se insertarán 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 de v4

La API de Sheets v4 proporciona la edición por lotes de valores de celdas a través del método spreadsheets.values.batchUpdate.

Para editar varias celdas, debes enviar una solicitud POST con los cambios de 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 el rango, todos los valores proporcionados se escribirán en la hoja a partir de esa celda como la coordenada superior izquierda. Si, en cambio, especificas un rango de varias celdas, los valores que proporciones deben ajustarse a ese rango exactamente. De lo contrario, la API devolverá un error.