2010-09-15 22 views
8

Quiero copiar una hoja de cálculo de Google Docs ya existente a una nueva hoja de cálculo de Google Docs. No creo que el v2.0 .NET API puede manejarlo de forma nativa (o si no puedo encontrar la clase/método), sin embargo, parece que el v3.0 protocol puede pero no estoy seguro de cómo implementar esto en el marco actual o incluso si es posible con la API actual .net. p.ej. ~ DocumentsFeed.copy() (pseudo código).Copie una hoja de cálculo de Google Docs con Google .NET API

exportar a un archivo de Excel temp luego subir con un nuevo nombre tampoco es posible ya que algunas de las fórmulas complejas llegar en mal estado en el proceso de conversión.

Soy un poco de un novato .NET por lo que cualquier información sería muy apreciado por ejemplo. ¿Cómo haría esto en .NET si solo pudiera usar el protocolo v3 (ajax, etc.) y no la API .NET?

Gracias

EDIT: (clase final gracias a @langsamu por su ayuda!)

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

Con un poco de ajuste puede hacer que sea 'tipo de documento' independiente y no solo para hojas de cálculo, pero no lo necesito así que no puedo justificar el momento en este momento. – User123342234

Respuesta

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

Esta solución es básicamente acerca de la recuperación de una hoja de cálculo existente (service.Query) utilizando el Document List API y volver a insertarlo (service.Insert).

Asegúrese de que cambie el nombre de la aplicación ALL CAPS, nombre de usuario, contraseña y el título de hoja de cálculo.

Agregue una referencia a Google.GData.Documents.

Esto está usando .NET 4 (también debería funcionar con versiones más bajas) y Google Documents List Data API v2.0 (DLL dice que la versión es 1.6.0.0: google-gdata), que parece usar la versión 3.0 del protocolo.

+0

¡Tío funcionó como un amuleto! Añadí un poco más que cambió el nombre del nuevo archivo. Lo siento, fue demasiado tarde para la recompensa. ¡Pero gurú, sin embargo! (publiqué mi clase para cualquier otra persona que quisiera usarla) – User123342234

0

que es un poco claro si está desarrollando una aplicación web o una aplicación de escritorio, por lo que' Trataré de cubrir ambos (esencialmente son muy parecidos, porque ...).

Si está desarrollando una aplicación web que no será capaz de hacer una solución AJAX 100%. Solo podrá solicitar URL en el mismo dominio. Para hacerlo, deberá hacer solo el lado del servidor de comunicaciones, o hacerlo desde el lado del servidor y delegarlo en su aplicación web a través de AJAX.

Si está desarrollando una aplicación de escritorio que tendrá que hacer esto aswell cosas. Excepto la parte AJAX.

Una aplicación ejemplo sería bastante fácil - 2-3 horas de trabajo para preparar rápidamente teniendo en cuenta the documentation given. Con solo un poco de conocimiento de la creación de solicitudes HTTP y POST, debería poder hacerlo funcionar.

+0

Hola. Gracias por intentar ayudar, pero esencialmente reformulaste mi pregunta y confirmé que debería ser posible. He agregado un código de donde estoy ... He estado atascado en esto por casi una semana:/ – User123342234

Cuestiones relacionadas