Mittlerweile bin ich ein Stück weiter und habe konkretere Fragen
Ich habe zwei Wege gefunden auf die Tabellen zuzugreifen. Den ersten gehe ich vermutlich nicht, da ich die Tabellen als Datei eigentlich nicht brauche oder denke das es eher umständlich ist.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| private void DocsXlsSave() { RequestSettings settings = new RequestSettings(applicationName, credentials); settings.AutoPaging = true; settings.PageSize = 100;
DocumentsRequest documentsRequest = new DocumentsRequest(settings); Feed<Document> documentFeed = documentsRequest.GetSpreadsheets();
foreach (Document document in documentFeed.Entries) { Stream downloadStream = documentsRequest.Download(document, "xls"); Stream fileSaveStream = new FileStream(string.Format(@"C:\Temp\googletest\{0}.xls", document.Title), FileMode.CreateNew);
if (fileSaveStream != null) { int nBytes = 2048; int count = 0; Byte[] arr = new Byte[nBytes];
do { count = downloadStream.Read(arr, 0, nBytes); fileSaveStream.Write(arr, 0, count);
} while (count > 0); fileSaveStream.Flush(); fileSaveStream.Close(); } downloadStream.Close(); } } |
Mit dem zweiten Weg kann man die Felder der Tabellen auslesen, was eigentlich eher ist was ich brauche.
Erst mal die Methode:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| private void Tabelle() { SpreadsheetsService myService = new SpreadsheetsService("AppName"); myService.setUserCredentials("NAME@googlemail.com", "password");
Google.GData.Spreadsheets.SpreadsheetQuery query = new Google.GData.Spreadsheets.SpreadsheetQuery(); SpreadsheetFeed feed = myService.Query(query);
SpreadsheetEntry mySpreadsheet = (SpreadsheetEntry)feed.Entries[0]; AtomLink link = mySpreadsheet.Links.FindService(GDataSpreadsheetsNameTable.WorksheetRel, null);
WorksheetQuery wQuery = new WorksheetQuery(link.HRef.ToString()); WorksheetFeed wFeed = myService.Query(wQuery);
WorksheetEntry worksheetEntry = (WorksheetEntry)wFeed.Entries[0]; AtomLink cLink = worksheetEntry.Links.FindService(GDataSpreadsheetsNameTable.CellRel, null);
CellQuery cQuery = new CellQuery(cLink.HRef.ToString()); CellFeed cFeed = myService.Query(cQuery);
foreach (CellEntry cCell in cFeed.Entries) { MessageBox.Show(string.Format("Value on row {0} and column {1} is {2}", cCell.Row, cCell.Cell.Column, cCell.Cell.Value)); } } |
Das kann man auch gut so anpassen das nicht die erste sondern eine bestimmte Tabelle geholt wird.
Nun zu meinen Problemen.
Ziel ist es, die Daten die von Google kommen, in einem Programm auf dem Rechner zu speichern. Dort sollen sie verwendet, verändert und wieder hochgeladen werden. (Ein echter Sync würde vermutlich gehen, aber derzeit wäre ich ja schon froh, wenn ich die Daten angezeigt werden und ich sie verwenden kann. Hochladen wäre dann auch toll und später wäre natürlich auch gut, wenn ich die Daten lokal nicht jedes Mal lösche, sondern abgleiche

)
Aber Stück für Stück.
Zwei Probleme vor denen ich derzeit stehe. Zum einen muss aus der Tabelle in Google eine Datenbankstruktur inkl. der Daten erstellt werden. Und zum Anderen sind die Werte teilweise mit einem ' am Anfang gespeichert, weil Google sonst die Werte als Datum interpretieren könnte.
1.
Ich habe eine Tabelle in Google Docs die ein Abbild einer Datenbank darstellt. In der ersten Zeile steht der Name der Tabelle, in der Zweiten dann die Feldnamen, dann kommen die Inhalte. Irgendwann kommt wieder der Tabellenname der nächsten Tabelle, die Feldnamen und dann wieder die Inhalte.
Aufgebaut ist das so:
Name der Tabelle
||TOLLER Tabellenname||
dann kommt eine Zeile mit einfachen Texten, das sind die Feldnamen
dann kommen die Werte (unbestimmte Anzahl von Zeilen.
Dann eine Zeile die die zweite Tabelle einleitet mit
||TOLLER Tabellenname||
usw.
Ich denke vermutlich könnte man das so machen, dann man die cCell.Cell.Value nach dem || absucht und eine neue Tabelle macht. Die nächste Zeile definiert die Feldnamen der Tabelle und dann füllt man nachfolgend die Zeilen mit den Werten mit wieder || kommt.
Konkret habe ich noch keinen Plan wie das geht.
2.
Alle Texte und Daten (Mehrzahl von Datum) haben das ' zu beginn (wie oben beschrieben macht Google sonst machmal ein Datum aus einer Zahl). Damit man lokal mit den Daten arbeiten kann, muss das jeweils entfernt werden.
3.
Huch waren doch nur zwei
Generell überlege ich halt was da der beste Weg ist. Da ich die Tabelle/Datenbank kenne und weiß welche Felder in welche Tabelle kommen, könnte ich vielleicht lokal eine Datenbank mit zwei Tabellen definieren und die Werte dort reinschreiben, wenn ich sie aus Google irgendwie geordnet raus bekomme. Oder definiert man lieber alles zur Laufzeit?
Also mal soweit. Ich würde gerne den einen oder anderen Tipp zu den o.g. Punkten entgegen nehmen, dann kann ich vermutlich schneller und sinnvoller ans Ziel kommen
