Questo articolo illustra come convertire MS Excel XLS o XLSX in Fogli Google a livello di codice in C# .NET.

Converti Excel XLS o XLSX in Fogli Google in C# .NET

I fogli di calcolo sono comunemente usati per archiviare dati su piccola o grande scala sotto forma di righe e colonne. Sono disponibili varie applicazioni per creare e manipolare fogli di calcolo, di cui MS Excel è uno dei più diffusi. Inoltre, Google fornisce Fogli Google, che viene utilizzato per creare e aggiornare fogli di lavoro online. Inoltre, Fogli Google ti consente di condividere i fogli di lavoro con più persone in tempo reale. In alcuni casi, potrebbe essere necessario esportare i dati dai file XLS o XLSX di Excel in un foglio di lavoro in Fogli Google in modo programmatico. Vediamo quindi come leggere i dati da un file Excel e scriverli nel foglio di calcolo di Fogli Google in C# .NET.

Prerequisiti - Converti file Excel in Fogli Google in C#

Progetto Google Cloud

Per comunicare con Fogli Google, dovremo creare un progetto su Google Cloud e abilitare l’API Fogli Google. Di seguito sono riportati i passaggi per creare un progetto e abilitare l’API.

  1. Vai alla console Google Cloud.
  2. Crea un nuovo progetto sulla console.
    • Seleziona il progetto che hai appena creato.
  3. Dal menu di navigazione, seleziona API e servizi e poi Dashboard.
    • Fare clic sul pulsante Abilita API e servizi (vedi dettagli).
    • Cerca e abilita l’API di Fogli Google.
  4. Configura la schermata di consenso OAuth e imposta gli ambiti dell’applicazione.
    • Aggiungi utenti di prova, che vengono utilizzati quando l’applicazione non è pubblicata.
  5. Nella pagina API e servizi, vai a Credenziali.
    • Fare clic sul pulsante Crea credenziali e selezionare ID client OAuth.
    • Nel tipo di applicazione, seleziona App desktop (poiché stiamo creando un’applicazione console in questo articolo).
    • Scarica il file JSON.

API C# .NET per la conversione da Excel a Fogli Google

Per esportare i dati dai file XLS/XLSX di Excel a Fogli Google, avremo bisogno delle seguenti API.

Al momento della stesura di questo articolo, abbiamo utilizzato Aspose.Cells per .NET 22.2 e Google.Apis.Sheets.v4 1.56.0.2608.

Esporta dati da Excel XLSX a Fogli Google in C#

Di seguito è riportata la guida dettagliata su come leggere i dati da un file XLSX di Excel e scriverlo in Fogli Google in un’applicazione console C#.

  1. Creare un nuovo progetto di applicazione console in Visual Studio 2013 o versioni successive.
Esporta dati da Excel XLSX a Fogli Google in C#
  1. Installa Aspose.Cells per .NET e le API di Fogli Google nel progetto.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Copia il file JSON (che abbiamo scaricato dopo aver creato le credenziali in Google Cloud) e incollalo nella directory del progetto.

  2. Inizializzare il servizio Fogli Google utilizzando le credenziali (file JSON) e definire gli ambiti dell’applicazione. Gli ambiti definiscono le autorizzazioni di accesso ai fogli e alle relative proprietà. La seguente funzione inizializza il servizio Fogli Google e restituisce l’oggetto SheetsService.

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

public static SheetsService ConnectToGoogle()
{
    // Se si modificano questi ambiti, eliminare le credenziali salvate in precedenza
    // in ~/.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))
    {
        // Il file token.json archivia i token di accesso e aggiornamento dell'utente e viene creato
        // automaticamente al completamento del flusso di autorizzazione per la prima volta.
        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);
    }

    // Crea il servizio API di Fogli Google
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Crea la funzione Crea foglio di calcolo che crea un nuovo foglio di calcolo su Fogli Google, imposta il nome del foglio predefinito e restituisce un oggetto Foglio di calcolo.
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)
{
    // Crea un nuovo foglio di calcolo
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Crea un nuovo foglio
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Esegui richiesta
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Crea una funzione Aggiungi Foglio per aggiungere un nuovo foglio nel foglio di lavoro di Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Aggiungi nuovo foglio
    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
    });

    // Crea richiesta
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Esegui richiesta
    var response = batchUpdateRequest.Execute();

}
  1. Ora crea una nuova funzione ExportDataFromExcelToGoogleSheet, che legge ed esporta i dati da un file Excel a Fogli Google. In questa funzione, innanzitutto, carica il file XLS/XLSX di Excel utilizzando Aspose.Cells per .NET e ottieni il nome del primo foglio di lavoro nella cartella di lavoro.
// Carica una cartella di lavoro di Excel
Workbook wb = new Workbook(_excelFileName);

// Ottieni il nome del primo foglio di lavoro
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Quindi, chiama la funzione Crea foglio di calcolo per creare un nuovo foglio di lavoro su Fogli Google.
// Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Scorri i fogli di lavoro nel file Excel. In ogni iterazione, leggi i dati dal foglio di lavoro e aggiungili a un elenco.
// Scorri i fogli di lavoro
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Aggiungi un nuovo foglio
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Ottieni il numero di righe e colonne
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

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

    // Passa attraverso le righe
    for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Scorri ogni colonna nella riga selezionata
        for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Per ogni foglio di lavoro nel file Excel, crea una richiesta per scrivere i dati nel foglio di lavoro in Fogli Google.
// Definisci intervallo
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Imposta i valori
VRange.Values = list;

// Crea richiesta
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

// Esegui richiesta
UpdateValuesResponse response = upd.Execute();

// Ottieni risposta
string responseString = JsonConvert.SerializeObject(response);

Di seguito viene fornita la funzione completa per esportare i dati da un file Excel a un foglio di calcolo in Fogli Google.

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)
{
    // Carica una cartella di lavoro di Excel
    Workbook wb = new Workbook(_excelFileName);

    // Ottieni il nome del primo foglio di lavoro
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

    // Definisci intervallo
    String range;

    // Scorri i fogli di lavoro
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Aggiungi un nuovo foglio
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Ottieni il numero di righe e colonne
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

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

        // Passa attraverso le righe
        for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Scorri ogni colonna nella riga selezionata
            for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

        // Definisci intervallo
        ValueRange VRange = new ValueRange();
        VRange.Range = range;

        // Imposta i valori
        VRange.Values = list;

        // Crea richiesta
        SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
        upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

        // Esegui richiesta
        UpdateValuesResponse response = upd.Execute();

        // Ottieni risposta
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Codice sorgente completo

Di seguito è riportato il codice sorgente completo per convertire un file XLSX di Excel in Fogli Google in 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)
        {
            // Collegati a Google
            SheetsService sheetService = ConnectToGoogle();

            // Esporta i dati dal file Excel a Fogli Google
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Se si modificano questi ambiti, eliminare le credenziali salvate in precedenza
            // in ~/.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))
            {
                // Il file token.json archivia i token di accesso e aggiornamento dell'utente e viene creato
                // automaticamente al completamento del flusso di autorizzazione per la prima volta.
                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);
            }

            // Crea il servizio API di Fogli Google
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // Carica una cartella di lavoro di Excel
            Workbook wb = new Workbook(_excelFileName);

            // Ottieni il nome del primo foglio di lavoro
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Crea un nuovo foglio di lavoro Google con il foglio di lavoro predefinito
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

            // Definisci intervallo
            String range;

            // Scorri i fogli di lavoro
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // Il primo foglio viene creato per impostazione predefinita, quindi imposta solo l'intervallo
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Aggiungi un nuovo foglio
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Ottieni il numero di righe e colonne
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

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

                // Passa attraverso le righe
                for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Scorri ogni colonna nella riga selezionata
                    for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

                // Definisci intervallo
                ValueRange VRange = new ValueRange();
                VRange.Range = range;

                // Imposta i valori
                VRange.Values = list;

                // Crea richiesta
                SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
                upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

                // Esegui richiesta
                UpdateValuesResponse response = upd.Execute();

                // Ottieni risposta
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Crea un nuovo foglio di calcolo
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Crea un nuovo foglio
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Esegui richiesta
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

        }
        public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
        {
            // Aggiungi nuovo foglio
            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
            });

            // Crea richiesta
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Esegui richiesta
            var response = batchUpdateRequest.Execute();
        }
    }
}

Demo - Converti Excel in Fogli Google in C#

Ottieni una licenza Aspose.Cells gratuita

Puoi ottenere una licenza temporanea gratuita e utilizzare Aspose.Cells per .NET senza limitazioni di valutazione.

Conclusione

In questo articolo, hai imparato come convertire i file XLS o XLSX di Excel in Fogli Google in C#. Abbiamo spiegato come creare un progetto su Google Cloud, abilitare l’API di Fogli Google, leggere file Excel ed esportare dati da file Excel a Fogli Google. Inoltre, puoi esplorare altre funzionalità di Aspose.Cells per .NET usando la documentazione. Inoltre, puoi porre le tue domande tramite il nostro forum.

Guarda anche