Search code examples
c#google-sheetsgoogle-api-dotnet-clientgoogle-data-apigoogle-sheets-api

Accessing Google Spreadsheets with C# using Google Data API


I'm having some information in Google Spreadsheets as a single sheet. Is there any way by which I can read this information from .NET by providing the google credentials and spreadsheet address. Is it possible using Google Data APIs. Ultimately I need to get the information from Google spreadsheet in a DataTable. How can I do it? If anyone has attempted it, pls share some information.


Solution

  • According to the .NET user guide:

    Download the .NET client library:

    Add these using statements:

    using Google.GData.Client;
    using Google.GData.Extensions;
    using Google.GData.Spreadsheets;
    

    Authenticate:

    SpreadsheetsService myService = new SpreadsheetsService("exampleCo-exampleApp-1");
    myService.setUserCredentials("jo@gmail.com", "mypassword");
    

    Get a list of spreadsheets:

    SpreadsheetQuery query = new SpreadsheetQuery();
    SpreadsheetFeed feed = myService.Query(query);
    
    Console.WriteLine("Your spreadsheets: ");
    foreach (SpreadsheetEntry entry in feed.Entries)
    {
        Console.WriteLine(entry.Title.Text);
    }
    

    Given a SpreadsheetEntry you've already retrieved, you can get a list of all worksheets in this spreadsheet as follows:

    AtomLink link = entry.Links.FindService(GDataSpreadsheetsNameTable.WorksheetRel, null);
    
    WorksheetQuery query = new WorksheetQuery(link.HRef.ToString());
    WorksheetFeed feed = service.Query(query);
    
    foreach (WorksheetEntry worksheet in feed.Entries)
    {
        Console.WriteLine(worksheet.Title.Text);
    }
    

    And get a cell based feed:

    AtomLink cellFeedLink = worksheetentry.Links.FindService(GDataSpreadsheetsNameTable.CellRel, null);
    
    CellQuery query = new CellQuery(cellFeedLink.HRef.ToString());
    CellFeed feed = service.Query(query);
    
    Console.WriteLine("Cells in this worksheet:");
    foreach (CellEntry curCell in feed.Entries)
    {
        Console.WriteLine("Row {0}, column {1}: {2}", curCell.Cell.Row,
            curCell.Cell.Column, curCell.Cell.Value);
    }