docs.unity3d.com
    Show / Hide Table of Contents

    Class GoogleSheetsExtension

    Provides an editor interface to GoogleSheets.

    Inheritance
    Object
    CollectionExtension
    GoogleSheetsExtension
    Inherited Members
    CollectionExtension.TargetCollection
    CollectionExtension.Initialize()
    CollectionExtension.Destroy()
    Namespace: UnityEditor.Localization.Plugins.Google
    Syntax
    [Serializable]
    public class GoogleSheetsExtension : CollectionExtension
    Examples

    This example adds and configures a GoogleSheetsExtension to a StringTableCollection.

    public static class SetupExtensionSample
    {
    [MenuItem("CONTEXT/StringTableCollection/Add Configured Google Sheet Extension")]
    public static void AddAndConfigureExtension(MenuCommand command)
    {
        var collection = command.context as StringTableCollection;
    
        // Get or add a new GoogleSheetsExtension.
        var googleExtension = collection.Extensions.FirstOrDefault(e => e is GoogleSheetsExtension) as GoogleSheetsExtension;
        if (googleExtension == null)
        {
            googleExtension = new GoogleSheetsExtension();
            collection.AddExtension(googleExtension);
        }
    
        // Clear old data.
        googleExtension.Columns.Clear();
    
        // We need configure what each column will contain in the sheet
        var columnMappings = new List<SheetColumn>
        {
            // Column A will contain the Key
            new KeyColumn { Column = "A" },
    
            // Column B will contain any shared comments. These are Comment Metadata in the Shared category.
            new KeyCommentColumn { Column = "B" },
    
            // Column C will contain the English Locale and any comments that are just for this Locale.
            new LocaleColumn { Column = "C", LocaleIdentifier = "en", IncludeComments = true },
        };
    
        // Assign the columns to the extension
        googleExtension.Columns.AddRange(columnMappings);
    
        // Assign our Google Sheets service asset
        const string pathToYourAsset = "Assets/Google Sheets Service.asset"; //The path to your SheetsServiceProvider asset. See docs for further info.
        var sheetsServiceProvider = AssetDatabase.LoadAssetAtPath<SheetsServiceProvider>(pathToYourAsset);
        googleExtension.SheetsServiceProvider = sheetsServiceProvider;
    
        googleExtension.SpreadsheetId = "My spread sheet id"; // We need to provide the Spreadsheet id. This can be found in the url. See docs for further info.
        googleExtension.SheetId = 123456; // This is the id of the sheet in the Google Spreadsheet. it will be in the url after `gid=`.
    
        // Mark the collection dirty so that the changes are saved
        EditorUtility.SetDirty(collection);
    }
    }

    This example uses the data that was configured in the GoogleSheetsExtension to perform a Push.

    [MenuItem("Localization/Google Sheets/Push With Google Extension")]
    public static void PushWithExtension()
    {
        // You should provide your String Table Collection name here
        var tableCollection = LocalizationEditorSettings.GetStringTableCollection("My Strings");
        var googleExtension = tableCollection.Extensions.FirstOrDefault(e => e is GoogleSheetsExtension) as GoogleSheetsExtension;
        if (googleExtension == null)
        {
            Debug.LogError($"String Table Collection {tableCollection.TableCollectionName} Does not contain a Google Sheets Extension.");
            return;
        }
    
        PushExtension(googleExtension);
    }
    
    static void PushExtension(GoogleSheetsExtension googleExtension)
    {
        // Setup the connection to Google
        var googleSheets = new GoogleSheets(googleExtension.SheetsServiceProvider);
        googleSheets.SpreadSheetId = googleExtension.SpreadsheetId;
    
        // Now send the update. We can pass in an optional ProgressBarReporter so that we can updates in the Editor.
        googleSheets.PushStringTableCollection(googleExtension.SheetId, googleExtension.TargetCollection as StringTableCollection, googleExtension.Columns, new ProgressBarReporter());
    }

    This example shows how to use the data that was configured in a Google Sheets extension to perform a pull.

    [MenuItem("Localization/Google Sheets/Pull With Google Extension")]
    public static void PullWithExtension()
    {
        // You should provide your String Table Collection name here
        var tableCollection = LocalizationEditorSettings.GetStringTableCollection("My Strings");
        var googleExtension = tableCollection.Extensions.FirstOrDefault(e => e is GoogleSheetsExtension) as GoogleSheetsExtension;
        if (googleExtension == null)
        {
            Debug.LogError($"String Table Collection {tableCollection.TableCollectionName} Does not contain a Google Sheets Extension.");
            return;
        }
    
        PullExtension(googleExtension);
    }
    
    static void PullExtension(GoogleSheetsExtension googleExtension)
    {
        // Setup the connection to Google
        var googleSheets = new GoogleSheets(googleExtension.SheetsServiceProvider);
        googleSheets.SpreadSheetId = googleExtension.SpreadsheetId;
    
        // Now update the collection. We can pass in an optional ProgressBarReporter so that we can updates in the Editor.
        googleSheets.PullIntoStringTableCollection(googleExtension.SheetId, googleExtension.TargetCollection as StringTableCollection, googleExtension.Columns, reporter: new ProgressBarReporter());
    }

    This example shows how to push every StringTableCollection that contains a GoogleSheetsExtension.

    [MenuItem("Localization/Google Sheets/Push All Google Sheets Extensions")]
    public static void PushAllExtensions()
    {
        // Get every String Table Collection
        var stringTableCollections = LocalizationEditorSettings.GetStringTableCollections();
    
        foreach (var collection in stringTableCollections)
        {
            // Its possible a String Table Collection may have more than one GoogleSheetsExtension.
            // For example if each Locale we pushed/pulled from a different sheet.
            foreach (var extension in collection.Extensions)
            {
                if (extension is GoogleSheetsExtension googleExtension)
                {
                    PushExtension(googleExtension);
                }
            }
        }
    }

    This example shows how to pull every StringTableCollection that contains a GoogleSheetsExtension.

    [MenuItem("Localization/Google Sheets/Pull All Google Sheets Extensions")]
    public static void PullAllExtensions()
    {
        // Get every String Table Collection
        var stringTableCollections = LocalizationEditorSettings.GetStringTableCollections();
    
        foreach (var collection in stringTableCollections)
        {
            // Its possible a String Table Collection may have more than one GoogleSheetsExtension.
            // For example if each Locale we pushed/pulled from a different sheet.
            foreach (var extension in collection.Extensions)
            {
                if (extension is GoogleSheetsExtension googleExtension)
                {
                    PullExtension(googleExtension);
                }
            }
        }
    }

    Properties

    Columns

    The column mappings. Each SheetColumn represents a column in a Google sheet. The column mappings are responsible for converting to and from cell data.

    Declaration
    public List<SheetColumn> Columns { get; }
    Property Value
    Type Description
    List<SheetColumn>

    RemoveMissingPulledKeys

    If this value is set then after PullIntoStringTableCollection(Int32, StringTableCollection, IList<SheetColumn>, Boolean, ITaskReporter, Boolean) any keys that were not in the sheet will be removed. This is useful if you want to use a single sheet and will be adding and removing keys however if using multiple sheets then this value should be false to prevent accidental loss of data.

    Declaration
    public bool RemoveMissingPulledKeys { get; set; }
    Property Value
    Type Description
    Boolean

    SheetId

    The id of a sheet inside of a Google Spreadsheet. Each tab is a separate sheet. The sheet id can be found in the url after the gid section: https://docs.google.com/spreadsheets/d/>SpreadsheetId/edit#gid=SheetId

    Declaration
    public int SheetId { get; set; }
    Property Value
    Type Description
    Int32

    SheetsServiceProvider

    The SheetsServiceProvider provides the authorization and connection to the Google Sheets service.

    Declaration
    public SheetsServiceProvider SheetsServiceProvider { get; set; }
    Property Value
    Type Description
    SheetsServiceProvider

    SpreadsheetId

    The Id of the Google Sheet. This can be found by examining the url: https://docs.google.com/spreadsheets/d/>SpreadsheetId/edit#gid=SheetId Further information can be found here.

    Declaration
    public string SpreadsheetId { get; set; }
    Property Value
    Type Description
    String
    Back to top
    Copyright © 2023 Unity Technologies — Terms of use
    • Legal
    • Privacy Policy
    • Cookies
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)
    "Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
    Generated by DocFX on 18 October 2023