Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy a Google Docs Spreadsheet using Google .NET API

I'm wanting to copy an already existing Google Docs Spreadsheet to a new Google Docs spreadsheet. I dont think the v2.0 .NET API can handle it natively (or if so I can't find the class/method), however It looks like the v3.0 protocol can but I'm not sure how to implement this in the current framework or even if it is possible with the current .net api. eg. ~DocumentsFeed.copy() (pseudo code).

Exporting to a temp excel file then uploading with a new name is not possible either as some of the complex formulas get messed up in the conversion process.

I am a bit of a .NET noob so any info would be greatly appreciated eg. How would I go about doing this in .NET if I could only use the v3 protocol (ajax etc) and not the .NET API.

Thanks

EDIT: (final class thanks to @langsamu for his help!)

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);
    }
}
like image 790
User123342234 Avatar asked Sep 15 '10 06:09

User123342234


People also ask

Can Google Sheets pull data from an API?

The Google Sheets API lets you read, write, and format Google Sheets data with your preferred programming language, including Java, JavaScript, and Python.

How do I copy a Google Spreadsheet content?

To copy a cell in Google Sheets, use the “Ctrl” + “Shift” + “C” keyboard shortcut. When you copy a cell in Google Sheets, both the formula and the value get copied. To paste the formula only, click on the cell you'd like to paste it to. Then, right-click your mouse and select “Paste Special” from the dropdown menu.


1 Answers

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

This solution is basically about retrieving an existing spreadsheet (service.Query) using the Document List API and re-inserting it (service.Insert).

Make sure you replace the ALL CAPS application name, username, password and spreadsheet title.

Add a reference to Google.GData.Documents.

This is using .NET 4 (should work with lower versions as well) and Google Documents List Data API v2.0 (DLL says version is 1.6.0.0: google-gdata), which seems to use version 3.0 of the protocol.

like image 171
Samu Lang Avatar answered Sep 28 '22 06:09

Samu Lang