google-sheetsgdatagoogle-sheets-apigdata-api

Spreadsheets API Can not update a read-only feed


I'm trying to add new spreadsheet if it not exists with GData Spreadsheet API for .NET but it gives me following exception:

Can not update a read-only feed

Here's my code:

    var service = new SpreadsheetsService("<my-app>");
    service.setUserCredentials("<login>", "<password>");

    // Instantiate a SpreadsheetQuery object to retrieve spreadsheets.
    SpreadsheetQuery query = new SpreadsheetQuery();
    var title = "test";
    query.Title = title;

    // Make a request to the API and get all spreadsheets.
    SpreadsheetFeed feed = service.Query(query);

    if (!feed.Entries.Any())
    {
        var worksheet = new WorksheetEntry(20, 20, title);
        service.Insert(feed, worksheet);             
    }

Through Fiddler I see that I'm doing request to:

GET /feeds/spreadsheets/private/full?title=test

and it goes fine, but I don't see any requests for updating data. I suppose that I should change somehow SpreadsheetQuery to make it capable to write data, but I can't find how.


Solution

  • It's me being inattentive because google documentation on Spreadsheet API says:

    It is possible to create a new spreadsheet by uploading a spreadsheet file via the Google Drive API. The Spreadsheets API does not currently provide a way to delete a spreadsheet, but this is also provided in the Google Drive API. For testing purposes, you may create a spreadsheet manually or upload one.

    So I basically installed GoogleDrive API with Nuget. And then added following method for adding file:

    private static void AddFile(string title)
    {
        var clientID = "put here a clientID";
        var clientSecret = "put here a clientSecret";
    
        UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            new ClientSecrets
            {
                ClientId = clientID,
                ClientSecret = clientSecret,
            },
            new[] { DriveService.Scope.Drive },
            "here goes your account",
            CancellationToken.None).Result;
    
        // Create the service.
        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Drive API Sample",
        });
    
        var body = new Google.Apis.Drive.v2.Data.File();
        body.Title = title;
        //body.Description = "A test document";
        body.MimeType = "application/vnd.google-apps.spreadsheet";
    
        service.Files.Insert(body).Execute();
    }
    

    When I run code above at the first time - I received an exception that said

    Could not load file or assembly 'Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.16.0

    I run these in Package Manager Console:

    Uninstall-Package Microsoft.Bcl.Async -Force
    Install-Package Microsoft.Bcl.Async
    

    and it worked. Hope it would help somebody who will stumble over the same issue.