La API de datos de Google Spreadsheets permite a las aplicaciones cliente ver y actualizar el contenido de Spreadsheets en forma de feeds de la API de datos de Google. Tu aplicación cliente puede solicitar una lista de las hojas de cálculo de un usuario, editar o eliminar contenido en una hoja de trabajo de Spreadsheets existente, y consultar el contenido de una hoja de trabajo de Spreadsheets existente.
Consulta http://code.google.com/apis/spreadsheets/overview.html para más información sobre la API de Google Spreadsheets.
La API de datos de Spreadsheets actualmente no proporciona una forma de crear o eliminar una hoja de cálculo mediante programación.
Puedes obtener una lista de hojas de cálculo de un usuario en particular utilizando
el método getSpreadsheetFeed() del servicio de Spreadsheets.
El servicio devolverá un objeto
Zend_Gdata_Spreadsheets_SpreadsheetFeed
que contiene una lista de hojas de cálculo asociadas al usuario
autenticado.
$service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME; $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service); $spreadsheetService = new Zend_Gdata_Spreadsheets($client); $feed = $spreadsheetService->getSpreadsheetFeed();
Una hoja de cálculo dada puede contener varias hojas de trabajo. Para cada hoja de cálculo, existe un metafeed de hojas de trabajo que enumera todas las hojas de trabajo de esa hoja de cálculo.
Dada la clave de la hoja de cálculo obtenida del <id> de un
objeto Zend_Gdata_Spreadsheets_SpreadsheetEntry
que ya hayas recuperado, puedes obtener un feed
que contiene una lista de hojas de trabajo asociadas a esa hoja de cálculo.
$query = new Zend_Gdata_Spreadsheets_DocumentQuery(); $query->setSpreadsheetKey($spreadsheetKey); $feed = $spreadsheetService->getWorksheetFeed($query);
El objeto feed Zend_Gdata_Spreadsheets_WorksheetFeed
resultante representa la respuesta del servidor. Entre otras
cosas, este feed contiene una lista de objetos
Zend_Gdata_Spreadsheets_WorksheetEntry
($feed->entries), cada uno de los cuales representa
una única hoja de trabajo.
Una hoja de trabajo dada generalmente contiene varias filas, cada una con varias celdas. Puedes solicitar datos de la hoja de trabajo ya sea como un feed basado en listas, en el cual cada entrada representa una fila, o como un feed basado en celdas, en el cual cada entrada representa una única celda. Para información sobre feeds basados en celdas, consulta Interactuar con feeds basados en celdas.
Las siguientes secciones describen cómo obtener un feed basado en listas, añadir una fila a una hoja de trabajo y enviar consultas con varios parámetros de consulta.
El feed de listas hace algunas suposiciones sobre cómo están organizados los datos en la hoja de cálculo.
En particular, el feed de listas trata la primera fila de la hoja de trabajo como una fila de encabezado; Spreadsheets crea dinámicamente elementos XML con nombres derivados del contenido de las celdas de la fila de encabezado. Los usuarios que deseen proporcionar feeds Gdata no deben colocar ningún dato que no sean los encabezados de columna en la primera fila de una hoja de trabajo.
El feed de listas contiene todas las filas después de la primera fila hasta la primera fila en blanco. La primera fila en blanco termina el conjunto de datos. Si los datos esperados no aparecen en un feed, revisa la hoja de trabajo manualmente para comprobar si hay una fila en blanco inesperada en medio de los datos. En particular, si la segunda fila de la hoja de cálculo está en blanco, el feed de listas no contendrá datos.
Una fila en un feed de listas es tan ancha en columnas como la propia hoja de trabajo.
Para obtener el feed de listas de una hoja de trabajo, usa el
método getListFeed() del servicio de Spreadsheets.
$query = new Zend_Gdata_Spreadsheets_ListQuery(); $query->setSpreadsheetKey($spreadsheetKey); $query->setWorksheetId($worksheetId); $listFeed = $spreadsheetService->getListFeed($query);
El objeto Zend_Gdata_Spreadsheets_ListFeed
resultante $listfeed representa una respuesta del
servidor. Entre otras cosas, este feed contiene un array de objetos
Zend_Gdata_Spreadsheets_ListEntry
($listFeed->entries), cada uno de los cuales representa
una única fila en una hoja de trabajo.
Cada Zend_Gdata_Spreadsheets_ListEntry contiene un
array, custom, que contiene los datos de esa
fila. Puedes extraer y mostrar este array:
$rowData = $listFeed->entries[1]->getCustom();
foreach($rowData as $customEntry) {
echo $customEntry->getColumnName() . " = " . $customEntry->getText();
}
Una versión alternativa de este array, customByName, permite el acceso directo a las celdas de una entrada por nombre. Esto es conveniente cuando se intenta acceder a un encabezado específico:
$customEntry = $listFeed->entries[1]->getCustomByName('my_heading');
echo $customEntry->getColumnName() . " = " . $customEntry->getText();
Por defecto, las filas en el feed aparecen en el mismo orden que las
filas correspondientes en la interfaz gráfica; es decir, están en orden por
número de fila. Para obtener las filas en orden inverso, establece la propiedad
reverse del objeto Zend_Gdata_Spreadsheets_ListQuery
en TRUE:
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($spreadsheetKey);
$query->setWorksheetId($worksheetId);
$query->setReverse('true');
$listFeed = $spreadsheetService->getListFeed($query);
Ten en cuenta que si deseas ordenar (u ordenar de forma inversa) por una
columna en particular, en lugar de por posición en la hoja de trabajo,
puedes establecer el valor orderby del
objeto Zend_Gdata_Spreadsheets_ListQuery como
column:<el encabezado de esa columna>.
Puedes establecer el valor sq de un
Zend_Gdata_Spreadsheets_ListQuery para producir un feed
con entradas que cumplan los criterios especificados. Por ejemplo, supón que tienes
una hoja de trabajo que contiene datos de personal, en la que cada fila representa
información sobre una única persona. Deseas obtener todas las filas
en las que el nombre de la persona sea "John" y la edad de la persona sea mayor
de 25. Para hacerlo, establecerías sq de la siguiente forma:
$query = new Zend_Gdata_Spreadsheets_ListQuery();
$query->setSpreadsheetKey($spreadsheetKey);
$query->setWorksheetId($worksheetId);
$query->setSpreadsheetQuery('name=John and age>25');
$listFeed = $spreadsheetService->getListFeed($query);
Se pueden añadir filas a una hoja de cálculo utilizando el
método insertRow() del servicio de Spreadsheet.
$insertedListEntry = $spreadsheetService->insertRow($rowData,
$spreadsheetKey,
$worksheetId);
El parámetro $rowData contiene un array de claves de columna
asociadas a valores de datos. El método devuelve un objeto
Zend_Gdata_Spreadsheets_SpreadsheetsEntry
que representa la fila insertada.
Spreadsheets inserta la nueva fila inmediatamente después de la última fila que aparece en el feed basado en listas, es decir, inmediatamente antes de la primera fila completamente en blanco.
Una vez obtenido un objeto Zend_Gdata_Spreadsheets_ListEntry,
sus filas pueden actualizarse utilizando el
método updateRow() del servicio de Spreadsheet.
$updatedListEntry = $spreadsheetService->updateRow($oldListEntry,
$newRowData);
El parámetro $oldListEntry contiene la entrada de lista
a actualizar. $newRowData contiene un array de
claves de columna asociadas a valores de datos, que se usarán como los nuevos datos de la fila.
El método devuelve un objeto
Zend_Gdata_Spreadsheets_SpreadsheetsEntry
que representa la fila actualizada.
Para eliminar una fila, simplemente invoca deleteRow() en el
objeto Zend_Gdata_Spreadsheets con la entrada existente
que se desea eliminar:
$spreadsheetService->deleteRow($listEntry);
Alternativamente, puedes llamar al método delete() de
la propia entrada:
$listEntry->delete();
En un feed basado en celdas, cada entrada representa una única celda.
Ten en cuenta que no recomendamos interactuar con un feed basado en celdas y un feed basado en listas para la misma hoja de trabajo al mismo tiempo.
Para obtener el feed de celdas de una hoja de trabajo, usa el
método getCellFeed() del servicio de Spreadsheets.
$query = new Zend_Gdata_Spreadsheets_CellQuery(); $query->setSpreadsheetKey($spreadsheetKey); $query->setWorksheetId($worksheetId); $cellFeed = $spreadsheetService->getCellFeed($query);
El objeto Zend_Gdata_Spreadsheets_CellFeed
resultante $cellFeed representa una respuesta del
servidor. Entre otras cosas, este feed contiene un array de objetos
Zend_Gdata_Spreadsheets_CellEntry
($cellFeed>entries), cada uno de los cuales representa
una única celda en una hoja de trabajo. Puedes mostrar esta información:
foreach($cellFeed as $cellEntry) {
$row = $cellEntry->cell->getRow();
$col = $cellEntry->cell->getColumn();
$val = $cellEntry->cell->getText();
echo "$row, $col = $val\n";
}
Supón que deseas obtener las celdas de la primera columna de una hoja de trabajo. Puedes solicitar un feed de celdas que contenga solo esa columna de la siguiente manera:
$query = new Zend_Gdata_Spreadsheets_CellQuery(); $query->setMinCol(1); $query->setMaxCol(1); $query->setMinRow(2); $feed = $spreadsheetService->getCellsFeed($query);
Esto solicita todos los datos en la columna 1, comenzando por la fila 2.
Para modificar el contenido de una celda, llama a
updateCell() con la fila, la columna
y el nuevo valor de la celda.
$updatedCell = $spreadsheetService->updateCell($row,
$col,
$inputValue,
$spreadsheetKey,
$worksheetId);
Los nuevos datos se colocan en la celda especificada de la hoja de trabajo.
Si la celda especificada ya contiene datos, serán
sobrescritos. Nota: Usa updateCell() para cambiar
los datos de una celda, incluso si la celda está vacía.