GoogleSheetsWrapper 1.0.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package GoogleSheetsWrapper --version 1.0.4                
NuGet\Install-Package GoogleSheetsWrapper -Version 1.0.4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="GoogleSheetsWrapper" Version="1.0.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add GoogleSheetsWrapper --version 1.0.4                
#r "nuget: GoogleSheetsWrapper, 1.0.4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install GoogleSheetsWrapper as a Cake Addin
#addin nuget:?package=GoogleSheetsWrapper&version=1.0.4

// Install GoogleSheetsWrapper as a Cake Tool
#tool nuget:?package=GoogleSheetsWrapper&version=1.0.4                

GoogleSheetsWrapper

NuGet Install

You can install this library via NuGet below,

https://www.nuget.org/packages/GoogleSheetsWrapper

You can also explore the entire the latest NuGet package below via FuGet,

GoogleSheetsWrapper on fuget.org

Google Sheets API .NET Wrapper Library

This library allows you to use strongly typed objects against a Google Sheets spreadsheet without having to have knowledge on the Google Sheets API methods and protocols.

The following Google Sheets API operations are supported:

  • Reading all rows
  • Appending new rows
  • Deleting rows
  • Updating specific cells

All operations above are encapsulated in the SheetHelper class.

There are also base classes, BaseRecord and BaseRepository to simply transforming raw Google Sheets rows into .NET objects.

Extending the BaseRecord class you can decorate properties with the SheetFieldAttribute to describe the column header name, the column index (1 based index and not 0 based index)

public class TestRecord : BaseRecord
{
    [SheetField(
        DisplayName = "Name",
        ColumnID = 1,
        FieldType = SheetFieldType.String)]
    public string Name { get; set; }

    [SheetField(
        DisplayName = "Number",
        ColumnID = 2,
        FieldType = SheetFieldType.PhoneNumber)]
    public long PhoneNumber { get; set; }

    [SheetField(
        DisplayName = "Previous Donation Amount",
        ColumnID = 3,
        FieldType = SheetFieldType.Currency)]
    public double DonationAmount { get; set; }

    [SheetField(
        DisplayName = "Date",
        ColumnID = 4,
        FieldType = SheetFieldType.DateTime)]
    public DateTime DateTime { get; set; }

    public TestRecord() { }

    public TestRecord(IList<object> row, int rowId) : base(row, rowId) { }
}

Extending the BaseRepository allows you to define your own access layer to the Google Sheets tab you want to work with.

public class TestRepository : BaseRepository<TestRecord>
{
    public TestRepository() { }

    public TestRepository(SheetHelper<TestRecord> sheetsHelper)
        : base(sheetsHelper) { }
}

Using the Google Sheets Wrapper library.

Note that to do this you will need to setup a Google Service Account and create a service account key. More details can be found here: https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys

// You need to implement your own configuration management solution here!
var settings = AppSettings.FromEnvironment();

// Create a SheetHelper class for the specified Google Sheet and Tab name
var sheetHelper = new SheetHelper<TestRecord>(
    settings.GoogleSpreadsheetId,
    settings.GoogleServiceAccountName,
    settings.GoogleMainSheetName);

sheetHelper.Init(settings.JsonCredential);

// Create a Repository for the TestRecord class
var repository = new TestRepository(sheetHelper);

// Validate that the header names match the expected format defined with the SheetFieldAttribute values
var result = repository.ValidateSchema();

if(!result.IsValid)
{
    throw new ArgumentException(result.ErrorMessage);
}

// Get all rows from the Google Sheet
var allRecords = repository.GetAllRecords();

// Get the first record
var firstRecord = allRecords.First();

// Update the DonationAmount field and save it back to Google Sheets
firstRecord.DonationAmount = 99.99;
repository.SaveField(firstRecord, (r) => r.DonationAmount);

// Delete the first record from Google Sheets
repository.DeleteRecord(firstRecord);

// Add a new record to the end of the Google Sheets tab
repository.AddRecord(new TestRecord()
{
    Name = "John",
    Number = 2021112222,
    DonationAmount = 250.50,
    Date = DateTime.Now()
});

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.22 293 10/31/2024
2.0.21 79 10/31/2024
2.0.20 354 9/28/2024
2.0.19 81 9/28/2024
2.0.18 346 8/19/2024
2.0.17 24,233 7/20/2024
2.0.16 137 6/8/2024
2.0.15 142 6/3/2024
2.0.14 96 6/3/2024
2.0.13 109 5/29/2024
2.0.12 116 5/29/2024
2.0.11 401 1/20/2024
2.0.10 118 1/20/2024
2.0.9 2,639 1/8/2024
2.0.8 118 1/6/2024
2.0.7 125 1/6/2024
2.0.6 246 12/19/2023
2.0.5 274 11/28/2023
2.0.4 322 11/26/2023
2.0.3 123 11/25/2023
2.0.2 144 11/14/2023
2.0.1 113 11/14/2023
2.0.0 113 11/13/2023
1.0.58 23,181 11/13/2023
1.0.57 156 11/6/2023
1.0.56 125 11/6/2023
1.0.55 167 10/21/2023
1.0.54 1,562 5/9/2023
1.0.53 168 5/6/2023
1.0.52 48,072 2/7/2023
1.0.51 1,849 1/1/2023
1.0.50 290 12/29/2022
1.0.49 312 11/28/2022
1.0.48 305 11/28/2022
1.0.47 320 11/28/2022
1.0.46 307 11/28/2022
1.0.45 320 11/28/2022
1.0.44 327 11/22/2022
1.0.43 311 11/22/2022
1.0.42 317 11/22/2022
1.0.41 322 11/22/2022
1.0.40 335 11/22/2022
1.0.39 446 11/20/2022
1.0.38 316 11/19/2022
1.0.37 1,030 8/25/2022
1.0.36 406 8/18/2022
1.0.35 506 8/2/2022
1.0.34 415 6/18/2022
1.0.33 514 5/19/2022
1.0.32 398 5/17/2022
1.0.31 653 3/8/2022
1.0.30 439 3/8/2022
1.0.29 443 1/19/2022
1.0.28 298 12/20/2021
1.0.27 457 10/31/2021
1.0.26 310 10/28/2021
1.0.25 317 10/26/2021
1.0.24 343 10/17/2021
1.0.23 393 10/17/2021
1.0.22 349 10/16/2021
1.0.21 417 9/12/2021
1.0.20 413 8/26/2021
1.0.19 320 8/25/2021
1.0.18 309 8/25/2021
1.0.17 331 8/22/2021
1.0.16 327 8/22/2021
1.0.15 307 8/22/2021
1.0.14 332 8/21/2021
1.0.13 347 8/21/2021
1.0.12 338 8/21/2021
1.0.11 297 8/21/2021
1.0.10 307 8/21/2021
1.0.9 312 8/11/2021
1.0.8 309 8/9/2021
1.0.7 316 8/9/2021
1.0.6 341 8/8/2021
1.0.5 310 8/6/2021
1.0.4 344 8/5/2021
1.0.3 345 8/3/2021
1.0.2 336 8/3/2021
1.0.1 383 8/1/2021
1.0.0 305 8/1/2021