Este artigo aborda como converter MS Excel XLS ou XLSX em Planilhas Google programaticamente em C# .NET.

Converter Excel XLS ou XLSX para Google Sheets em C# .NET

As planilhas são comumente usadas para armazenar dados de pequena ou grande escala na forma de linhas e colunas. Vários aplicativos estão disponíveis para criar e manipular planilhas, dos quais MS Excel é um dos mais populares. Além disso, o Google fornece o Google Sheets, que é usado para criar e atualizar planilhas online. Além disso, o Planilhas Google permite compartilhar as planilhas com várias pessoas em tempo real. Em alguns casos, pode ser necessário exportar dados de arquivos Excel XLS ou XLSX para uma planilha no Planilhas Google de forma programática. Então, vamos ver como você pode ler dados de um arquivo do Excel e gravá-los na planilha do Google Sheets em C# .NET.

Pré-requisitos - Converter arquivo do Excel para planilhas do Google em C#

Projeto Google Cloud

Para nos comunicarmos com o Planilhas Google, teremos que criar um projeto no Google Cloud e ativar a API do Planilhas Google. A seguir estão as etapas para criar um projeto e ativar a API.

  1. Acesse o console do Google Cloud.
  2. Crie um novo projeto no console.
    • Selecione o projeto que você acabou de criar.
  3. No menu de navegação, selecione APIs e Serviços e, em seguida, Painel.
    • Clique no botão Habilitar APIs e Serviços (ver detalhes).
    • Pesquise e ative a API do Planilhas Google.
  4. Configure a tela de consentimento OAuth e defina os escopos do aplicativo.
    • Adicione usuários de teste, que são usados quando o aplicativo não é publicado.
  5. Na página APIs e Serviços, vá para Credenciais.
    • Clique no botão Criar credenciais e selecione ID do cliente OAuth.
    • Em tipo de aplicativo, selecione Desktop App (já que estamos criando um aplicativo de console neste artigo).
    • Baixe o arquivo JSON.

C# .NET APIs para conversão de Excel para Google Sheets

Para exportar dados de arquivos XLS/XLSX do Excel para o Planilhas Google, precisaremos das seguintes APIs.

No momento da redação deste artigo, usamos Aspose.Cells para .NET 22.2 e Google.Apis.Sheets.v4 1.56.0.2608.

Exportar dados do Excel XLSX para o Google Sheets em C#

Veja a seguir o guia passo a passo sobre como ler dados de um arquivo XLSX do Excel e gravá-los no Planilhas Google em um aplicativo de console C#.

  1. Crie um novo projeto de aplicativo de console no Visual Studio 2013 ou posterior.
Exportar dados do Excel XLSX para o Google Sheets em C#
  1. Instale as APIs Aspose.Cells para .NET e Google Sheets no projeto.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Copie o arquivo JSON (que baixamos após criar as credenciais no Google Cloud) e cole-o no diretório do projeto.

  2. Inicialize o serviço do Planilhas Google usando as credenciais (arquivo JSON) e defina os escopos do aplicativo. Os escopos definem as permissões de acesso às planilhas e suas propriedades. A função a seguir inicializa o serviço do Planilhas Google e retorna o 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()
{
    // Se estiver modificando esses escopos, exclua suas credenciais salvas anteriormente
    // em ~/.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))
    {
        // O arquivo token.json armazena os tokens de acesso e atualização do usuário e é criado
        // automaticamente quando o fluxo de autorização é concluído pela primeira 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);
    }

    // Criar serviço de API do Planilhas Google
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Crie a função CreateSpreadsheet que cria uma nova planilha no Google Sheets, define o nome da planilha padrão e retorna um objeto 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)
{
    // Criar uma nova planilha
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Criar uma nova planilha
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Executar solicitação
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Crie uma função AddSheet para adicionar uma nova planilha na planilha do Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Adicionar nova planilha
    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
    });

    // Criar solicitação
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Executar solicitação
    var response = batchUpdateRequest.Execute();

}
  1. Agora, crie uma nova função ExportDataFromExcelToGoogleSheet, que lê e exporta dados de um arquivo Excel para o Planilhas Google. Nesta função, primeiro, carregue o arquivo Excel XLS/XLSX usando Aspose.Cells para .NET e obtenha o nome da primeira planilha na pasta de trabalho.
// Carregar uma pasta de trabalho do Excel
Workbook wb = new Workbook(_excelFileName);

// Obter nome da primeira planilha
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Em seguida, chame a função CreateSpreadsheet para criar uma nova planilha no Google Sheets.
// Criar uma nova planilha do Google com planilha padrão
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Percorra as planilhas no arquivo Excel. Em cada iteração, leia os dados da planilha e adicione-os a uma lista.
// Percorrer planilhas
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Adicionar uma nova planilha
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Obter número de linhas e colunas
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

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

    // Percorrer as linhas
    for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Percorrer cada coluna na linha selecionada
        for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Para cada planilha no arquivo Excel, crie uma solicitação para gravar dados na planilha no Planilhas Google.
// Definir intervalo
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Definir valores
VRange.Values = list;

// Criar solicitação
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

// Executar solicitação
UpdateValuesResponse response = upd.Execute();

// Obter resposta
string responseString = JsonConvert.SerializeObject(response);

A função completa para exportar dados de um arquivo Excel para uma planilha no Google Sheets é fornecida abaixo.

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)
{
    // Carregar uma pasta de trabalho do Excel
    Workbook wb = new Workbook(_excelFileName);

    // Obter nome da primeira planilha
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Criar uma nova planilha do Google com planilha padrão
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

    // Definir intervalo
    String range;

    // Percorrer planilhas
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Adicionar uma nova planilha
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Obter número de linhas e colunas
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

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

        // Percorrer as linhas
        for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Percorrer cada coluna na linha selecionada
            for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

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

        // Definir valores
        VRange.Values = list;

        // Criar solicitação
        SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
        upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

        // Executar solicitação
        UpdateValuesResponse response = upd.Execute();

        // Obter resposta
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Código fonte completo

Veja a seguir o código-fonte completo para converter um arquivo XLSX do Excel para o Planilhas Google em 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)
        {
            // Conectar-se ao Google
            SheetsService sheetService = ConnectToGoogle();

            // Exportar dados do arquivo Excel para o Planilhas Google
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Se estiver modificando esses escopos, exclua suas credenciais salvas anteriormente
            // em ~/.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))
            {
                // O arquivo token.json armazena os tokens de acesso e atualização do usuário e é criado
                // automaticamente quando o fluxo de autorização é concluído pela primeira 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);
            }

            // Criar serviço de API do Planilhas Google
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // Carregar uma pasta de trabalho do Excel
            Workbook wb = new Workbook(_excelFileName);

            // Obter nome da primeira planilha
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Criar uma nova planilha do Google com planilha padrão
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

            // Definir intervalo
            String range;

            // Percorrer planilhas
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // A primeira planilha é criada por padrão, portanto, apenas defina o intervalo
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Adicionar uma nova planilha
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Obter número de linhas e colunas
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

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

                // Percorrer as linhas
                for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Percorrer cada coluna na linha selecionada
                    for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

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

                // Definir valores
                VRange.Values = list;

                // Criar solicitação
                SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
                upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

                // Executar solicitação
                UpdateValuesResponse response = upd.Execute();

                // Obter resposta
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Criar uma nova planilha
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Criar uma nova planilha
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Executar solicitação
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

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

            // Criar solicitação
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Executar solicitação
            var response = batchUpdateRequest.Execute();
        }
    }
}

Demo - Converter Excel para Google Sheets em C#

Obtenha uma licença gratuita do Aspose.Cells

Você pode obter uma licença temporária gratuita e usar o Aspose.Cells para .NET sem limitações de avaliação.

Conclusão

Neste artigo, você aprendeu como converter arquivos Excel XLS ou XLSX em Planilhas Google em C#. Abordamos como criar um projeto no Google Cloud, ativar a API do Planilhas Google, ler arquivos do Excel e exportar dados de arquivos do Excel para o Planilhas Google. Além disso, você pode explorar outros recursos do Aspose.Cells para .NET usando a documentação. Além disso, você pode fazer suas perguntas através do nosso fórum.

Veja também