2010-09-15 14 views
8

Chcę skopiować istniejący arkusz kalkulacyjny Dokumentów Google do nowego arkusza kalkulacyjnego Dokumentów Google. Nie sądzę, aby można go było obsłużyć natywnie (lub jeśli tak, nie mogę znaleźć klasy/metody), jednak wygląda na to, że może wyglądać na v3.0 protocol, ale nie jestem pewien, jak zaimplementować to w obecnej strukturze lub nawet jeśli jest to możliwe z bieżącym interfejsem .net. na przykład. ~ DocumentsFeed.copy() (pseudo kod).Skopiuj arkusz kalkulacyjny Dokumentów Google za pomocą interfejsu API Google .NET

Eksportowanie do pliku temp excel, a następnie przesyłanie z nową nazwą nie jest możliwe, ponieważ niektóre złożone formuły zostają pomieszane w procesie konwersji.

Jestem trochę noob .NET, więc wszelkie informacje będą bardzo mile widziane, np. W jaki sposób mam zamiar zrobić to w .NET, jeśli mogę tylko używać protokołu v3 (ajax itp.), A nie .NET API.

Dzięki

EDIT: (final class dzięki @langsamu za pomoc!)

using System; 
using Google.GData.Documents; 
using Google.GData.Client; 
using Google.GData.Extensions; 


public class GoogleDocument 
{ 
    private DocumentsService ds; 
    private String username; 
    private String password; 

    public GoogleDocument(String username, String password) 
    { 
     this.ds = new DocumentsService("doc service name"); 
     this.username = username; 
     this.password = password; 

     this.ds.setUserCredentials(username, password); 
     this.ds.QueryClientLoginToken(); 
    } 

    public void copyDocument(String oldFileName, String newFileName) 
    { 
     SpreadsheetQuery query = new Google.GData.Documents.SpreadsheetQuery(); 
     query.Title = oldFileName; 
     query.TitleExact = true; 

     DocumentsFeed feed = this.ds.Query(query); 
     AtomEntry entry = feed.Entries[0]; 

     entry.Title.Text = newFileName; 

     var feedUri = new Uri(DocumentsListQuery.documentsBaseUri); 
     this.ds.Insert(feedUri, entry); 
    } 
} 
+0

Przy odrobinie ulepszenia można uczynić go "typem dokumentu" niezależnym, a nie tylko dla arkuszy kalkulacyjnych, ale nie potrzebuję tego, więc nie mogę teraz usprawiedliwić czasu. – User123342234

Odpowiedz

4
Google.GData.Documents.DocumentsService service = new Google.GData.Documents.DocumentsService("YOUR_APPLICATIONS_NAME"); 
service.setUserCredentials("YOUR_USERNAME", "YOUR_PASSWORD"); 

Google.GData.Documents.SpreadsheetQuery query = new Google.GData.Documents.SpreadsheetQuery(); 
query.Title = "YOUR_SPREADSHEETS_TITLE"; 
query.TitleExact = true; 

Google.GData.Documents.DocumentsFeed feed = service.Query(query); 
Google.GData.Client.AtomEntry entry = feed.Entries[0]; 

var feedUri = new Uri(Google.GData.Documents.DocumentsListQuery.documentsBaseUri); 

service.Insert(feedUri, entry); 

To rozwiązanie jest w zasadzie o pobieranie istniejącego arkusza (service.Query) przy użyciu Document List API i ponowne umieszczenie go (service.Insert).

Należy zastąpić nazwę aplikacji, nazwę użytkownika, hasło i tytuł arkusza kalkulacyjnego ALL CAPS.

Dodaj odniesienie do Google.GData.Documents.

To używa .NET 4 (powinno działać również w niższych wersjach) i Google Documents List Data API v2.0 (DLL mówi, że wersja 1.6.0.0: google-gdata), która wydaje się używać wersji 3.0 protokołu.

+0

Stary, działa jak czar! Dodałem trochę więcej, co zmieniło nazwę nowego pliku. Przepraszam, że było już za późno na nagrodę. Ale mimo to guru! (wysłał moją klasę dla każdego, kto chciał z niej skorzystać) – User123342234

0

To jest trochę niejasne, jeśli się tworzeniem aplikacji internetowych lub aplikacji pulpitu, więc jestem Spróbuję i omówię oba (w zasadzie są bardzo podobne - ponieważ ...).

Jeśli tworzysz aplikację internetową, nie będziesz w stanie stworzyć rozwiązania w 100% AJAX. Będzie można zażądać tylko adresów URL w tej samej domenie. Aby to zrobić, musisz albo wykonać stronę serwera komunikacyjnego, albo zrobić to po stronie serwera i wprowadzić serwer proxy do swojej aplikacji internetowej za pośrednictwem AJAX.

Jeśli pracujesz nad aplikacją komputerową, musisz to zrobić również. Z wyjątkiem części AJAX.

Przykładowa aplikacja byłaby dość łatwa - 2-3 godzinne prace nad poprawą, biorąc pod uwagę the documentation given. Przy odrobinie wiedzy na temat tworzenia żądań HTTP i POST powinieneś być w stanie sprawić, by działało.

+0

Hej. Dziękuję za pomoc, ale zasadniczo zmieniłeś moje pytanie i potwierdziłeś, że powinno to być możliwe. Dodałem kod, w którym jestem ... Utknąłem na tym od prawie tygodnia:/ – User123342234

Powiązane problemy