Este artículo cubre cómo convertir MS Excel XLS o XLSX a Hojas de cálculo de Google mediante programación en C# .NET.

Convierta Excel XLS o XLSX a Google Sheets en C# .NET

Las hojas de cálculo se utilizan comúnmente para almacenar datos a pequeña o gran escala en forma de filas y columnas. Hay varias aplicaciones disponibles para crear y manipular hojas de cálculo, de las cuales MS Excel es una de las más populares. Además, Google proporciona Hojas de cálculo de Google, que se utiliza para crear y actualizar hojas de cálculo en línea. Además, Google Sheets le permite compartir las hojas de cálculo con varias personas en tiempo real. En ciertos casos, es posible que deba exportar datos de archivos Excel XLS o XLSX a una hoja de cálculo en Hojas de cálculo de Google mediante programación. Entonces, veamos cómo puede leer datos de un archivo de Excel y escribirlos en la hoja de cálculo de Google Sheets en C# .NET.

Requisitos previos: convertir archivos de Excel a hojas de cálculo de Google en C#

Proyecto de nube de Google

Para comunicarnos con Hojas de cálculo de Google, tendremos que crear un proyecto en Google Cloud y habilitar la API de Hojas de cálculo de Google. Los siguientes son los pasos para crear un proyecto y habilitar la API.

  1. Ve a la consola de Google Cloud.
  2. Crear un nuevo proyecto en la consola.
    • Seleccione el proyecto que acaba de crear.
  3. En el menú de navegación, seleccione API y servicios y luego Tablero.
    • Haga clic en el botón Habilitar API y servicios (ver detalles).
    • Busque y habilite la API de Hojas de cálculo de Google.
  4. Configure la pantalla de consentimiento de OAuth y establezca los alcances de la aplicación.
    • Agregue usuarios de prueba, que se utilizan cuando la aplicación no está publicada.
  5. En la página API y servicios, vaya a Credenciales.
    • Haga clic en el botón Crear credenciales y seleccione ID de cliente de OAuth.
    • En tipo de aplicación, seleccione Aplicación de escritorio (ya que estamos creando una aplicación de consola en este artículo).
    • Descargue el archivo JSON.

API de C# .NET para la conversión de Excel a Hojas de cálculo de Google

Para exportar datos de archivos Excel XLS/XLSX a Hojas de cálculo de Google, necesitaremos las siguientes API.

Al momento de escribir este artículo, usábamos Aspose.Cells for .NET 22.2 y Google.Apis.Sheets.v4 1.56.0.2608.

Exportar datos de Excel XLSX a Google Sheets en C#

La siguiente es una guía paso a paso sobre cómo leer datos de un archivo XLSX de Excel y escribirlos en Hojas de cálculo de Google en una aplicación de consola C#.

  1. Cree un nuevo proyecto de aplicación de consola en Visual Studio 2013 o posterior.
Exportar datos de Excel XLSX a Google Sheets en C#
  1. Instale Aspose.Cells for .NET y las API de Google Sheets en el proyecto.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Copie el archivo JSON (que hemos descargado después de crear las credenciales en Google Cloud) y péguelo en el directorio del proyecto.

  2. Inicialice el servicio de Google Sheets usando las credenciales (archivo JSON) y defina los alcances de la aplicación. Los ámbitos definen los permisos de acceso a las hojas y sus propiedades. La siguiente función inicializa el servicio de Hojas de cálculo de Google y devuelve el objeto 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 modifica estos ámbitos, elimine sus credenciales previamente guardadas
    // en ~/.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))
    {
        // El archivo token.json almacena los tokens de acceso y actualización del usuario, y se crea
        // automáticamente cuando el flujo de autorización se completa por primera vez.
        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);
    }

    // Crear el servicio API de Hojas de cálculo de Google
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Cree la función CreateSpreadsheet que crea una nueva hoja de cálculo en Google Sheets, establece el nombre de la hoja predeterminada y devuelve un objeto de hoja de cálculo.
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)
{
    // Crear una nueva hoja de cálculo
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Crear una nueva hoja
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Ejecutar solicitud
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Cree una función AddSheet para agregar una nueva hoja en la hoja de cálculo de Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Agregar nueva hoja
    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
    });

    // Crear solicitud
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Ejecutar solicitud
    var response = batchUpdateRequest.Execute();

}
  1. Ahora, cree una nueva función ExportDataFromExcelToGoogleSheet, que lee y exporta datos de un archivo de Excel a Hojas de cálculo de Google. En esta función, primero, cargue el archivo Excel XLS/XLSX usando Aspose.Cells for .NET y obtenga el nombre de la primera hoja de trabajo en el Workbook.
// Cargar un libro de Excel
Workbook wb = new Workbook(_excelFileName);

// Obtener el nombre de la primera hoja de trabajo
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Luego, llame a la función CreateSpreadsheet para crear una nueva hoja de cálculo en Google Sheets.
// Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Recorra las hojas de trabajo en el archivo de Excel. En cada iteración, lea los datos de la hoja de trabajo y agréguelos a una lista.
// Recorrer las hojas de trabajo
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Agregar una nueva hoja
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Obtener el número de filas y columnas
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

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

    // Bucle a través de filas
    for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Recorra cada columna en la fila seleccionada
        for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Para cada hoja de trabajo en el archivo de Excel, cree una solicitud para escribir datos en la hoja de cálculo en Hojas de cálculo de Google.
// Definir rango
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Establecer valores
VRange.Values = list;

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

// Ejecutar solicitud
UpdateValuesResponse response = upd.Execute();

// Obtener una respuesta
string responseString = JsonConvert.SerializeObject(response);

La función completa para exportar datos de un archivo de Excel a una hoja de cálculo en Hojas de cálculo de Google se proporciona a continuación.

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)
{
    // Cargar un libro de Excel
    Workbook wb = new Workbook(_excelFileName);

    // Obtener el nombre de la primera hoja de trabajo
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

    // Definir rango
    String range;

    // Recorrer las hojas de trabajo
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Agregar una nueva hoja
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Obtener el número de filas y columnas
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

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

        // Bucle a través de filas
        for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Recorra cada columna en la fila seleccionada
            for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

        // Definir rango
        ValueRange VRange = new ValueRange();
        VRange.Range = range;

        // Establecer valores
        VRange.Values = list;

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

        // Ejecutar solicitud
        UpdateValuesResponse response = upd.Execute();

        // Obtener una respuesta
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Código fuente completo

El siguiente es el código fuente completo para convertir un archivo XLSX de Excel a Hojas de cálculo de Google 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)
        {
            // Conéctese a Google
            SheetsService sheetService = ConnectToGoogle();

            // Exportar datos de un archivo de Excel a Hojas de cálculo de Google
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Si modifica estos ámbitos, elimine sus credenciales previamente guardadas
            // en ~/.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))
            {
                // El archivo token.json almacena los tokens de acceso y actualización del usuario, y se crea
                // automáticamente cuando el flujo de autorización se completa por primera vez.
                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);
            }

            // Crear el servicio API de Hojas de cálculo de Google
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

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

            // Obtener el nombre de la primera hoja de trabajo
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Cree una nueva hoja de cálculo de Google con la hoja de trabajo predeterminada
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

            // Definir rango
            String range;

            // Recorrer las hojas de trabajo
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // La primera hoja se crea de forma predeterminada, por lo que solo se establece el rango
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Agregar una nueva hoja
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Obtener el número de filas y columnas
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

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

                // Bucle a través de filas
                for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Recorra cada columna en la fila seleccionada
                    for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

                // Definir rango
                ValueRange VRange = new ValueRange();
                VRange.Range = range;

                // Establecer valores
                VRange.Values = list;

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

                // Ejecutar solicitud
                UpdateValuesResponse response = upd.Execute();

                // Obtener una respuesta
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Crear una nueva hoja de cálculo
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Crear una nueva hoja
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Ejecutar solicitud
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

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

            // Crear solicitud
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Ejecutar solicitud
            var response = batchUpdateRequest.Execute();
        }
    }
}

Demostración - Convierta Excel a Hojas de cálculo de Google en C#

Obtenga una licencia gratuita de Aspose.Cells

Puede obtener una licencia temporal gratuita y usar Aspose.Cells for .NET sin limitaciones de evaluación.

Conclusión

En este artículo, aprendió cómo convertir archivos Excel XLS o XLSX a Hojas de cálculo de Google en C#. Hemos cubierto cómo crear un proyecto en Google Cloud, habilitar la API de Google Sheets, leer archivos de Excel y exportar datos de archivos de Excel a Google Sheets. Además, puede explorar otras funciones de Aspose.Cells for .NET utilizando la documentación. Además, puede hacer sus preguntas a través de nuestro foro.

Ver también