2010-09-15 3 views
8

Je souhaite copier une feuille de calcul Google Docs existante dans une nouvelle feuille de calcul Google Docs. Je ne pense pas que le v2.0 .NET API peut le gérer nativement (ou si je ne trouve pas la classe/méthode), mais il semble que le v3.0 protocol peut mais je ne suis pas sûr comment implémenter cela dans le cadre actuel ou même si c'est possible avec l'actuelle .net api. par exemple. ~ DocumentsFeed.copy() (pseudo code).Copie d'une feuille de calcul Google Docs à l'aide de l'API Google .NET

Exportation vers un fichier temporaire Excel puis le téléchargement sous un nouveau nom n'est pas possible car certaines formules complexes sont endommagées lors du processus de conversion.

Je suis un peu d'un .NET noob donc toute information serait grandement appréciée par exemple. Comment ferais-je cela en .NET si je pouvais seulement utiliser le protocole v3 (ajax etc) et pas l'API .NET.

Merci

EDIT: (classe finale grâce à @langsamu pour son aide!)

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

Avec un peu de peaufinage, vous pouvez rendre le 'type de document' indépendant et pas seulement pour les feuilles de calcul, mais je n'ai pas besoin de cela, donc je ne peux pas justifier l'heure maintenant. – User123342234

Répondre

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); 

Cette solution est essentiellement sur la récupération d'une feuille de calcul existante (service.Query) en utilisant la Document List API et re-insérer (service.Insert).

Assurez-vous de remplacer le nom de l'application, le nom d'utilisateur, le mot de passe et le titre de la feuille de calcul ALL CAPS.

Ajouter une référence à Google.GData.Documents.

Ceci utilise .NET 4 (devrait fonctionner aussi avec les versions inférieures) et Google Documents List Data API v2.0 (DLL dit la version est 1.6.0.0: google-gdata), qui semble utiliser la version 3.0 du protocole.

+0

Mec, il a travaillé comme un charme! J'ai ajouté un petit peu supplémentaire qui a changé le nom du nouveau fichier. Désolé, il était trop tard pour la prime. Mais gourou néanmoins! (posté ma classe pour quelqu'un d'autre qui voulait l'utiliser) – User123342234

0

Il est un peu difficile de savoir si vous développez une application Web ou une application de bureau, donc je Je vais essayer de couvrir les deux (essentiellement ils sont très semblables - parce que ...).

Si vous développez une application Web, vous ne pourrez pas créer une solution AJAX à 100%. Vous ne pourrez demander que des URL sur le même domaine. Pour ce faire, vous devrez soit faire uniquement le côté serveur de communication, soit le faire côté serveur et le transférer vers votre application Web via AJAX.

Si vous développez une application de bureau, vous devrez aussi faire ce genre de choses. Sauf la partie AJAX.

Un exemple d'application serait assez facile - 2-3 heures de travail à fouetter en considérant the documentation given. Avec juste une petite connaissance des requêtes HTTP et POST, vous devriez pouvoir le faire fonctionner.

+0

Salut. Merci d'avoir essayé d'aider, mais vous avez essentiellement reformulé ma question et confirmé que cela devrait être possible. J'ai ajouté un peu de code d'où je suis ... J'ai été coincé sur cela pendant presque une semaine maintenant:/ – User123342234

Questions connexes