Cet article explique comment convertir MS Excel XLS ou XLSX en Google Sheets par programmation dans C# .NET.

Convertir Excel XLS ou XLSX en Google Sheets en C# .NET

Les feuilles de calcul sont couramment utilisées pour stocker des données à petite ou grande échelle sous forme de lignes et de colonnes. Diverses applications sont disponibles pour créer et manipuler des feuilles de calcul, dont MS Excel est l’une des plus populaires. Parallèlement, Google fournit Google Sheets, qui est utilisé pour créer et mettre à jour des feuilles de calcul en ligne. De plus, Google Sheets vous permet de partager les feuilles de calcul avec plusieurs personnes en temps réel. Dans certains cas, vous devrez peut-être exporter par programme des données à partir de fichiers Excel XLS ou XLSX vers une feuille de calcul dans Google Sheets. Voyons donc comment vous pouvez lire les données d’un fichier Excel et les écrire dans la feuille de calcul de Google Sheets en C# .NET.

Prérequis - Convertir un fichier Excel en Google Sheets en C#

Projet Google Cloud

Pour communiquer avec Google Sheets, nous devrons créer un projet sur Google Cloud et activer l’API Google Sheets. Voici les étapes pour créer un projet et activer l’API.

  1. Accédez à la console Google Cloud.
  2. Créer un nouveau projet sur la console.
    • Sélectionnez le projet que vous venez de créer.
  3. Dans le menu de navigation, sélectionnez API et services, puis Tableau de bord.
    • Cliquez sur le bouton Activer les API et les services (voir les détails).
    • Recherchez et activez l’API Google Sheets.
  4. Configurer l’écran de consentement OAuth et définir les étendues de l’application.
    • Ajoutez des utilisateurs de test, qui sont utilisés lorsque l’application n’est pas publiée.
  5. Sur la page API et services, accédez à Identifiants.
    • Cliquez sur le bouton Créer des informations d’identification et sélectionnez ID client OAuth.
    • Dans le type d’application, sélectionnez Application de bureau (car nous créons une application console dans cet article).
    • Téléchargez le fichier JSON.

API C# .NET pour la conversion d’Excel en Google Sheets

Pour exporter des données à partir de fichiers Excel XLS/XLSX vers Google Sheets, nous aurons besoin des API suivantes.

Au moment de la rédaction de cet article, nous utilisions Aspose.Cells for .NET 22.2 et Google.Apis.Sheets.v4 1.56.0.2608.

Exporter des données d’Excel XLSX vers Google Sheets en C#

Ce qui suit est le guide étape par étape sur la façon de lire les données d’un fichier Excel XLSX et de les écrire dans Google Sheets dans une application de console C#.

  1. Créez un nouveau projet d’application console dans Visual Studio 2013 ou version ultérieure.
Exporter des données d'Excel XLSX vers Google Sheets en C#
  1. Installez les API Aspose.Cells for .NET et Google Sheets dans le projet.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Copiez le fichier JSON (que nous avons téléchargé après avoir créé les informations d’identification dans Google Cloud) et collez-le dans le répertoire du projet.

  2. Initialisez le service Google Sheets à l’aide des informations d’identification (fichier JSON) et définissez les portées de l’application. Les étendues définissent les autorisations d’accès aux feuilles et leurs propriétés. La fonction suivante initialise le service Google Sheets et renvoie l’objet SheetsService.

using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Services;
using Google.Apis.Util.Store;

public static SheetsService ConnectToGoogle()
{
    // Si vous modifiez ces champs d'application, supprimez vos informations d'identification précédemment enregistrées
    // à ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
    string[] Scopes = { SheetsService.Scope.Spreadsheets };
    string ApplicationName = "Excel to Google Sheet";

    UserCredential credential;

    using (var stream =
        new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
    {
        // Le fichier token.json stocke les jetons d'accès et d'actualisation de l'utilisateur et est créé
        // automatiquement lorsque le flux d'autorisation se termine pour la première fois.
        string credPath = "token.json";
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.FromStream(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(credPath, true)).Result;
        Console.WriteLine("Credential file saved to: " + credPath);
    }

    // Créer un service d'API Google Sheets
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Créez la fonction CreateSpreadsheet qui crée une nouvelle feuille de calcul sur Google Sheets, définit le nom de la feuille par défaut et renvoie un objet Spreadsheet.
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;

public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
{
    // Créer une nouvelle feuille de calcul
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Créer une nouvelle feuille
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Exécuter la demande
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Créez une fonction AddSheet pour ajouter une nouvelle feuille dans la feuille de calcul Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Ajouter une nouvelle feuille
    var addSheetRequest = new AddSheetRequest();
    addSheetRequest.Properties = new SheetProperties();
    addSheetRequest.Properties.Title = _sheetName;
    BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
    batchUpdateSpreadsheetRequest.Requests = new List<Request>();
    batchUpdateSpreadsheetRequest.Requests.Add(new Request
    {
        AddSheet = addSheetRequest
    });

    // Créer une demande
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Exécuter la demande
    var response = batchUpdateRequest.Execute();

}
  1. Maintenant, créez une nouvelle fonction ExportDataFromExcelToGoogleSheet, qui lit et exporte les données d’un fichier Excel vers Google Sheets. Dans cette fonction, chargez d’abord le fichier Excel XLS/XLSX à l’aide de Aspose.Cells for .NET et obtenez le nom de la première feuille de calcul du classeur.
// Charger un classeur Excel
Workbook wb = new Workbook(_excelFileName);

// Obtenir le nom de la première feuille de calcul
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Ensuite, appelez la fonction CreateSpreadsheet pour créer une nouvelle feuille de calcul sur Google Sheets.
// Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Parcourez les feuilles de calcul dans le fichier Excel. À chaque itération, lisez les données de la feuille de calcul et ajoutez-les à une liste.
// Parcourir les feuilles de calcul
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // La première feuille est créée par défaut, donc ne définissez que la plage
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Ajouter une nouvelle feuille
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Obtenir le nombre de lignes et de colonnes
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

    IList<IList<Object>> list = new List<IList<Object>>() { };

    // Boucle à travers les lignes
    for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Boucle sur chaque colonne de la ligne sélectionnée
        for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Pour chaque feuille de calcul du fichier Excel, créez une demande d’écriture de données dans la feuille de calcul dans Google Sheets.
// Définir la plage
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Définir les valeurs
VRange.Values = list;

// Créer une demande
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

// Exécuter la demande
UpdateValuesResponse response = upd.Execute();

// Avoir une réponse
string responseString = JsonConvert.SerializeObject(response);

La fonction complète pour exporter des données d’un fichier Excel vers une feuille de calcul dans Google Sheets est donnée ci-dessous.

using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Aspose.Cells;

public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
{
    // Charger un classeur Excel
    Workbook wb = new Workbook(_excelFileName);

    // Obtenir le nom de la première feuille de calcul
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

    Console.WriteLine("URL: " + spreadhsheet.SpreadsheetUrl);
    Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);

    // Définir la plage
    String range;

    // Parcourir les feuilles de calcul
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // La première feuille est créée par défaut, donc ne définissez que la plage
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Ajouter une nouvelle feuille
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Obtenir le nombre de lignes et de colonnes
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

        IList<IList<Object>> list = new List<IList<Object>>() { };

        // Boucle à travers les lignes
        for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Boucle sur chaque colonne de la ligne sélectionnée
            for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

        // Définir la plage
        ValueRange VRange = new ValueRange();
        VRange.Range = range;

        // Définir les valeurs
        VRange.Values = list;

        // Créer une demande
        SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
        upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

        // Exécuter la demande
        UpdateValuesResponse response = upd.Execute();

        // Avoir une réponse
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Code source complet

Voici le code source complet pour convertir un fichier Excel XLSX en Google Sheets en C#.

using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Sheets.v4.Data;
using Google.Apis.Services;
using Google.Apis.Util.Store;
using System.IO;
using System.Threading;
using Newtonsoft.Json;
using Aspose.Cells;

namespace ExcelToGoogle
{
    class Program
    {
        static void Main(string[] args)
        {
            // Connectez-vous à Google
            SheetsService sheetService = ConnectToGoogle();

            // Exporter les données d'un fichier Excel vers Google Sheets
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Si vous modifiez ces champs d'application, supprimez vos informations d'identification précédemment enregistrées
            // à ~/.credentials/sheets.googleapis.com-dotnet-quickstart.json
            string[] Scopes = { SheetsService.Scope.Spreadsheets };
            string ApplicationName = "Excel to Google Sheet";

            UserCredential credential;

            using (var stream =
                new FileStream("credentials1.json", FileMode.Open, FileAccess.Read))
            {
                // Le fichier token.json stocke les jetons d'accès et d'actualisation de l'utilisateur et est créé
                // automatiquement lorsque le flux d'autorisation se termine pour la première fois.
                string credPath = "token.json";
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.FromStream(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Créer un service d'API Google Sheets
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // Charger un classeur Excel
            Workbook wb = new Workbook(_excelFileName);

            // Obtenir le nom de la première feuille de calcul
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Créer une nouvelle feuille de calcul Google avec une feuille de calcul par défaut
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

            Console.WriteLine("Spreadsheet URL: " + spreadhsheet.SpreadsheetUrl);
            Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);

            // Définir la plage
            String range;

            // Parcourir les feuilles de calcul
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // La première feuille est créée par défaut, donc ne définissez que la plage
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Ajouter une nouvelle feuille
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Obtenir le nombre de lignes et de colonnes
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

                IList<IList<Object>> list = new List<IList<Object>>() { };

                // Boucle à travers les lignes
                for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Boucle sur chaque colonne de la ligne sélectionnée
                    for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

                // Définir la plage
                ValueRange VRange = new ValueRange();
                VRange.Range = range;

                // Définir les valeurs
                VRange.Values = list;

                // Créer une demande
                SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
                upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

                // Exécuter la demande
                UpdateValuesResponse response = upd.Execute();

                // Avoir une réponse
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Créer une nouvelle feuille de calcul
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Créer une nouvelle feuille
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Exécuter la demande
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

        }
        public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
        {
            // Ajouter une nouvelle feuille
            var addSheetRequest = new AddSheetRequest();
            addSheetRequest.Properties = new SheetProperties();
            addSheetRequest.Properties.Title = _sheetName;
            BatchUpdateSpreadsheetRequest batchUpdateSpreadsheetRequest = new BatchUpdateSpreadsheetRequest();
            batchUpdateSpreadsheetRequest.Requests = new List<Request>();
            batchUpdateSpreadsheetRequest.Requests.Add(new Request
            {
                AddSheet = addSheetRequest
            });

            // Créer une demande
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Exécuter la demande
            var response = batchUpdateRequest.Execute();
        }
    }
}

Démo - Convertir Excel en Google Sheets en C#

Obtenez une licence Aspose.Cells gratuite

Vous pouvez obtenir une licence temporaire gratuite et utiliser Aspose.Cells for .NET sans limitation d’évaluation.

Conclusion

Dans cet article, vous avez appris à convertir des fichiers Excel XLS ou XLSX en Google Sheets en C#. Nous avons expliqué comment créer un projet sur Google Cloud, activer l’API Google Sheets, lire des fichiers Excel et exporter des données de fichiers Excel vers Google Sheets. En outre, vous pouvez explorer d’autres fonctionnalités d’Aspose.Cells for .NET à l’aide de la documentation. Vous pouvez également poser vos questions via notre forum.

Voir également