89

Sto avendo alcune informazioni in Google fogli di calcolo come un foglio singolo. Esiste un modo in cui posso leggere queste informazioni da .NET fornendo le credenziali di google e l'indirizzo del foglio di calcolo. È possibile utilizzare le API di dati di Google. In definitiva, ho bisogno di ottenere le informazioni dal foglio di lavoro Google in un DataTable. Come posso farlo? Se qualcuno lo ha provato, pls condividerà alcune informazioni.Accesso a Google fogli di calcolo con C# utilizzando l'API dei dati di Google

risposta

163

Secondo il .NET user guide:

Scaricare il .NET client library:

Aggiungi queste affermazioni utilizzando:

using Google.GData.Client; 
using Google.GData.Extensions; 
using Google.GData.Spreadsheets; 

autenticazione:

SpreadsheetsService myService = new SpreadsheetsService("exampleCo-exampleApp-1"); 
myService.setUserCredentials("[email protected]", "mypassword"); 

Ottenere un elenco di fogli di calcolo:

SpreadsheetQuery query = new SpreadsheetQuery(); 
SpreadsheetFeed feed = myService.Query(query); 

Console.WriteLine("Your spreadsheets: "); 
foreach (SpreadsheetEntry entry in feed.Entries) 
{ 
    Console.WriteLine(entry.Title.Text); 
} 

Dato uno SpreadsheetEntry hai già recuperato, è possibile ottenere un elenco di tutti i fogli di lavoro in questo foglio di calcolo come segue:

AtomLink link = entry.Links.FindService(GDataSpreadsheetsNameTable.WorksheetRel, null); 

WorksheetQuery query = new WorksheetQuery(link.HRef.ToString()); 
WorksheetFeed feed = service.Query(query); 

foreach (WorksheetEntry worksheet in feed.Entries) 
{ 
    Console.WriteLine(worksheet.Title.Text); 
} 

E ottenere un feed basato cellulare :

AtomLink cellFeedLink = worksheetentry.Links.FindService(GDataSpreadsheetsNameTable.CellRel, null); 

CellQuery query = new CellQuery(cellFeedLink.HRef.ToString()); 
CellFeed feed = service.Query(query); 

Console.WriteLine("Cells in this worksheet:"); 
foreach (CellEntry curCell in feed.Entries) 
{ 
    Console.WriteLine("Row {0}, column {1}: {2}", curCell.Cell.Row, 
     curCell.Cell.Column, curCell.Cell.Value); 
} 
+3

Cosa dovrei usare per il valore di stringa per il nuovo SpreadsheetsService ("' exampleCo-exampleApp-1' ")? importa ciò che ho messo lì dentro? Grazie! –

+0

Ottieni un elenco di fogli di calcolo: "SpreadsheetQuery query = new SpreadsheetQuery();" dovrebbe leggere "SpreadsheetFeed feed = myService.Query (query);" Ho provato a modificare caratteri non abbastanza modificati! – BobF

+3

_https: //developers.google.com/google-apps/spreadsheets/authorize_ *** Importante: OAuth 1.0 non è più supportato e verrà disattivato il 5 maggio 2015. Se l'applicazione utilizza OAuth 1.0, è necessario eseguire la migrazione a OAuth 2.0 o la tua applicazione smetterà di funzionare. – Kiquenet

2

Sono abbastanza sicuro che ci saranno alcuni CKK/toolkit C# su Google Code per questo. Ho trovato this one, ma potrebbero essercene altri, quindi vale la pena visitarlo.

3

Si può fare quello che stai chiedendo diversi modi:

  1. utilizzando la libreria # foglio di calcolo C di Google (come nella risposta di Tacoman667) per andare a prendere un ListFeed che può restituire un elenco di righe (ListEntry in Google gergo) ognuno dei quali ha una lista di coppie nome-valore. La documentazione dell'API del foglio di lavoro di Google (http://code.google.com/apis/spreadsheets/code.html) contiene più di informazioni sufficienti per iniziare.

  2. Utilizzando l'API di visualizzazione di Google che consente di inviare query più sofisticate (quasi come SQL) per recuperare solo le righe/colonne necessarie.

  3. Il contenuto del foglio di calcolo viene restituito come feed Atom in modo da poter utilizzare l'analisi XPath o SAX per estrarre il contenuto di un feed di elenco. C'è un esempio di farlo in questo modo (in Java e Javascript solo se ho paura) a http://gqlx.twyst.co.za.

22

I wrote a simple wrapper intorno Google's .Net client library, espone un database-come l'interfaccia più semplice, con i tipi di record fortemente tipizzato.Ecco alcuni esempi di codice:

public class Entity { 
    public int IntProp { get; set; } 
    public string StringProp { get; set; } 
} 

var e1 = new Entity { IntProp = 2 }; 
var e2 = new Entity { StringProp = "hello" }; 
var client = new DatabaseClient("[email protected]", "password"); 
const string dbName = "IntegrationTests"; 
Console.WriteLine("Opening or creating database"); 
db = client.GetDatabase(dbName) ?? client.CreateDatabase(dbName); // databases are spreadsheets 
const string tableName = "IntegrationTests"; 
Console.WriteLine("Opening or creating table"); 
table = db.GetTable<Entity>(tableName) ?? db.CreateTable<Entity>(tableName); // tables are worksheets 
table.DeleteAll(); 
table.Add(e1); 
table.Add(e2); 
var r1 = table.Get(1); 

C'è anche un fornitore di LINQ che si traduce in google di structured query operators:

var q = from r in table.AsQueryable() 
     where r.IntProp > -1000 && r.StringProp == "hello" 
     orderby r.IntProp 
     select r; 
+0

@Kiquenet Cosa intendi? L'ultima versione che vedo di Google.GData. * È 2.2.0 http://www.nuget.org/packages/Google.GData.Documents/ –

+0

https://developers.google.com/google-apps/spreadsheets/ Versión 3.0 API (OAuth, ecc.) – Kiquenet

+0

@Kiquenet Fammi sapere quando Google aggiorna le loro librerie .NET. Ma penso che Google.GData. * 2.2.0 utilizzi già l'API v3. –

10

(giugno-novembre 2016) La domanda e le sue risposte sono ora out-of-date come: 1) GData APIs sono la precedente generazione di API di Google. Mentre non tutte le API GData sono state deprecate, all the latest Google APIs do non utilizza the Google Data Protocol; e 2) c'è un new Google Sheets API v4 (anche non GData).

Andando avanti da qui, è necessario ottenere the Google APIs Client Library for .NET e utilizzare l'ultimo Sheets API, che è molto più potente e flessibile rispetto a qualsiasi API precedente. Ecco un C# code sample per aiutarti a iniziare. Controlla anche lo .NET reference docs for the Sheets API e lo .NET Google APIs Client Library developers guide.

Se non sei allergico a Python (se lo fai, fai finta che sia pseudocodice; a C#, se desiderato:

Problemi correlati