Autor Beitrag
m-s
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Mi 27.04.11 15:24 
Kann mich da mal jemand in die richtige Richtung schupsen.

Ich möchte auf eine Tabelle in GoogleDocs lesen und schreiben und keine echte Idee wo anfangen.
Gefunden habe ich bisher:

code.google.com/intl...gdata/client-cs.html
google-gdata.googlec...svn/docs/index.html#

Beides leider in englisch und so eine kleine Einführung in deutsch wäre doch sehr hilfreich.

_________________
Gruß Markus
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Mi 04.05.11 23:04 
Hat keiner von Euch mal was mit Google Docs gemacht?
Ich stehe da mal wieder vorm Berg :)

Gruß Markus

_________________
Gruß Markus
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Fr 13.05.11 13:35 
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.
ausblenden volle Höhe C#-Quelltext
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:
ausblenden volle Höhe C#-Quelltext
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()
        {
            //authenticate
            SpreadsheetsService myService = new SpreadsheetsService("AppName");
            myService.setUserCredentials("NAME@googlemail.com""password");

            //retrieve available spreadsheets
            Google.GData.Spreadsheets.SpreadsheetQuery query = new Google.GData.Spreadsheets.SpreadsheetQuery();
            SpreadsheetFeed feed = myService.Query(query);

            //foreach (SpreadsheetEntry entry in feed.Entries)
            //{
            //    Console.WriteLine(entry.Title.Text);
            //}

            //retrieve the worksheets of a particular spreadsheet
            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);

            //retrieve the cells in a worksheet
            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 :)

_________________
Gruß Markus
m-s Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149
Erhaltene Danke: 7

Win 10
C# (VS 2015)
BeitragVerfasst: Sa 14.05.11 01:32 
Na da werd ich mal spaßeshalber mein Selbstgespräch hier weiter führen.

Habe alle oben angedachten Punkte so umgesetzt. Ist nen ziemliches Gefrickel und kann sicherlich so nicht gemeint sein, aber ich habe alle Werte in meinem Programm und kann jetzt weiter damit arbeiten.

Immerhin ...

_________________
Gruß Markus
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Sa 02.07.11 21:59 
Die .NET Google Spreadsheets API ist nicht gerade bekannt, gut auszusehen. Prinzipiell machst du alles richtig. Die Spreadsheets API ist nur für den Zugriff auf Online-Datenbanken gedacht. Ich habe gerade mal bei der .NET Google Docs API nachgeschaut, aber als .NET Entwickler kannst du nicht einmal Dokumente herunterladen. Dein GData ist auch eher ein Hack als alles andere.
Von daher ist deine "Lösung" schon elegant :zustimm: