У цій статті розповідається про те, як програмно конвертувати MS Excel XLS або XLSX у таблиці Google у C# .NET.

Перетворіть Excel XLS або XLSX на Google Таблиці в C# .NET

Електронні таблиці зазвичай використовуються для зберігання невеликих або великих даних у формі рядків і стовпців. Для створення електронних таблиць і роботи з ними доступні різні програми, серед яких MS Excel є популярною. Крім того, Google надає Google Sheets, який використовується для створення та оновлення електронних таблиць онлайн. Крім того, Google Sheets дозволяє ділитися електронними таблицями з кількома людьми в режимі реального часу. У деяких випадках може знадобитися експортувати дані з файлів Excel XLS або XLSX до електронної таблиці в Google Таблицях програмним шляхом. Отже, давайте подивимося, як можна прочитати дані з файлу Excel і записати їх до електронної таблиці Google Таблиць у C# .NET.

Попередні вимоги. Перетворення файлу Excel на Google Таблиці на C#

Проект Google Cloud

Щоб спілкуватися з Google Таблицями, нам потрібно буде створити проект у Google Cloud і ввімкнути Google Sheets API. Нижче наведено кроки для створення проекту та ввімкнення API.

  1. Перейдіть до консолі Google Cloud.
  2. Створіть новий проект на консолі.
    • Виберіть проект, який ви щойно створили.
  3. У навігаційному меню виберіть APIs and Services, а потім Dashboard.
    • Натисніть кнопку «Увімкнути API та служби» (докладніше).
    • Знайдіть і ввімкніть API Google Таблиць.
  4. Налаштуйте екран згоди OAuth і встановіть області застосування.
    • Додайте тестових користувачів, які використовуються, коли додаток не опубліковано.
  5. На сторінці API та служби перейдіть до облікових даних.
    • Натисніть кнопку «Створити облікові дані» та виберіть ідентифікатор клієнта OAuth.
    • У типі програми виберіть «Настільна програма» (оскільки ми створюємо консольну програму в цій статті).
    • Завантажте файл JSON.

C# .NET API для перетворення Excel у таблиці Google

Щоб експортувати дані з файлів Excel XLS/XLSX у Google Таблиці, нам знадобляться такі API.

На момент написання цієї статті ми використовували Aspose.Cells for .NET 22.2 і Google.Apis.Sheets.v4 1.56.0.2608.

Експорт даних із Excel XLSX до Google Таблиць у C#

Нижче наведено покроковий посібник із читання даних із файлу Excel XLSX і запису їх у таблиці Google у консольній програмі C#.

  1. Створіть новий проект консольної програми у Visual Studio 2013 або новішої версії.
Експорт даних із Excel XLSX у Google Таблиці на C#
  1. Встановіть Aspose.Cells for .NET і Google Sheets API у проекті.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Скопіюйте файл JSON (ми завантажили після створення облікових даних у Google Cloud) і вставте його в каталог проекту.

  2. Ініціалізуйте службу Google Sheets за допомогою облікових даних (файл JSON) і визначте область застосування. Області визначають права доступу до аркушів та їх властивості. Наступна функція ініціалізує службу Google Sheets і повертає об’єкт SheetsService.

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

public static SheetsService ConnectToGoogle()
{
    // Якщо ви змінюєте ці області, видаліть свої раніше збережені облікові дані
    // на ~/.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))
    {
        // Файл token.json зберігає маркери доступу та оновлення користувача та створюється
        // автоматично, коли потік авторизації завершується вперше.
        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);
    }

    // Створіть сервіс Google Sheets API
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Створіть функцію CreateSpreadsheet, яка створює нову електронну таблицю в Google Sheets, встановлює назву аркуша за замовчуванням і повертає об’єкт 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)
{
    // Створіть нову електронну таблицю
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Створіть новий аркуш
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Виконати запит
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Створіть функцію AddSheet, щоб додати новий аркуш до електронної таблиці Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Додати новий аркуш
    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
    });

    // Створити запит
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Виконати запит
    var response = batchUpdateRequest.Execute();

}
  1. Тепер створіть нову функцію ExportDataFromExcelToGoogleSheet, яка зчитує та експортує дані з файлу Excel до Google Таблиць. У цій функції спочатку завантажте файл Excel XLS/XLSX за допомогою Aspose.Cells for .NET і отримайте назву першого аркуша в книзі.
// Завантажте книгу Excel
Workbook wb = new Workbook(_excelFileName);

// Отримайте назву першого аркуша
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Потім викличте функцію CreateSpreadsheet, щоб створити нову електронну таблицю в Google Sheets.
// Створіть нову електронну таблицю Google із аркушем за умовчанням
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Перегляньте аркуші у файлі Excel. У кожній ітерації читайте дані з аркуша та додавайте їх до списку.
// Перегляньте робочі аркуші
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Додайте новий аркуш
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Отримати кількість рядків і стовпців
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

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

    // Перебирайте ряди
   for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Прокрутіть кожен стовпець у вибраному рядку
       for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Для кожного робочого аркуша у файлі Excel створіть запит на запис даних до електронної таблиці в Google Таблицях.
// Визначте діапазон
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Встановити значення
VRange.Values = list;

// Створити запит
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

// Виконати запит
UpdateValuesResponse response = upd.Execute();

// Отримати відповідь
string responseString = JsonConvert.SerializeObject(response);

Нижче наведено повну функцію експорту даних із файлу Excel до електронної таблиці в 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)
{
    // Завантажте книгу Excel
    Workbook wb = new Workbook(_excelFileName);

    // Отримайте назву першого аркуша
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Створіть нову електронну таблицю Google із аркушем за умовчанням
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

    // Визначте діапазон
    String range;

    // Перегляньте робочі аркуші
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Додайте новий аркуш
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Отримати кількість рядків і стовпців
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

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

        // Перебирайте ряди
       for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Перегляньте кожен стовпець у вибраному рядку
           for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

        // Визначте діапазон
        ValueRange VRange = new ValueRange();
        VRange.Range = range;

        // Встановити значення
        VRange.Values = list;

        // Створити запит
        SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
        upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

        // Виконати запит
        UpdateValuesResponse response = upd.Execute();

        // Отримати відповідь
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Повний вихідний код

Нижче наведено повний вихідний код для перетворення файлу Excel XLSX у Google Таблиці на 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)
        {
            // Підключіться до Google
            SheetsService sheetService = ConnectToGoogle();

            // Експортуйте дані з файлу Excel в Google Таблиці
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Якщо ви змінюєте ці області, видаліть свої раніше збережені облікові дані
            // на ~/.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))
            {
                // Файл token.json зберігає маркери доступу та оновлення користувача та створюється
                // автоматично, коли потік авторизації завершується вперше.
                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);
            }

            // Створіть сервіс Google Sheets API
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // Завантажте книгу Excel
            Workbook wb = new Workbook(_excelFileName);

            // Отримайте назву першого аркуша
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Створіть нову електронну таблицю Google із аркушем за умовчанням
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

            // Визначте діапазон
            String range;

            // Перегляньте робочі аркуші
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // Перший аркуш створюється за замовчуванням, тому встановлюється лише діапазон
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Додайте новий аркуш
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Отримати кількість рядків і стовпців
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

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

                // Перебирайте ряди
               for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Перегляньте кожен стовпець у вибраному рядку
                   for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

                // Визначте діапазон
                ValueRange VRange = new ValueRange();
                VRange.Range = range;

                // Встановити значення
                VRange.Values = list;

                // Створити запит
                SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
                upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

                // Виконати запит
                UpdateValuesResponse response = upd.Execute();

                // Отримати відповідь
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Створіть нову електронну таблицю
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Створіть новий аркуш
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Виконати запит
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

        }
        public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
        {
            // Додати новий аркуш
            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
            });

            // Створити запит
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Виконати запит
            var response = batchUpdateRequest.Execute();
        }
    }
}

Демонстрація – перетворення Excel на Google Таблиці на C#

Отримайте безкоштовну ліцензію Aspose.Cells

Ви можете отримати безкоштовну тимчасову ліцензію і використовувати Aspose.Cells for .NET без оціночних обмежень.

Висновок

У цій статті ви дізналися, як конвертувати файли Excel XLS або XLSX у Google Таблиці на C#. Ми розповіли, як створити проект у Google Cloud, увімкнути API Google Sheets, читати файли Excel і експортувати дані з файлів Excel у Google Sheets. Крім того, ви можете дослідити інші функції Aspose.Cells for .NET за допомогою документації. Ви також можете поставити свої запитання через наш форум.

Дивись також