W tym artykule opisano, jak programowo przekonwertować MS Excel XLS lub XLSX na Arkusze Google w języku C# .NET.

Konwertuj Excel XLS lub XLSX na Arkusze Google w C# .NET

Arkusze kalkulacyjne są powszechnie używane do przechowywania danych o małej lub dużej skali w postaci wierszy i kolumn. Dostępne są różne aplikacje do tworzenia arkuszy kalkulacyjnych i manipulowania nimi, z których popularny jest MS Excel. Oprócz tego Google udostępnia Arkusze Google, które służą do tworzenia i aktualizowania arkuszy kalkulacyjnych online. Ponadto Arkusze Google umożliwiają udostępnianie arkuszy kalkulacyjnych wielu osobom w czasie rzeczywistym. W niektórych przypadkach może być konieczne programowe wyeksportowanie danych z plików Excel XLS lub XLSX do arkusza kalkulacyjnego w Arkuszach Google. Zobaczmy więc, jak możesz odczytać dane z pliku Excel i zapisać je w arkuszu kalkulacyjnym Arkuszy Google w języku C# .NET.

Wymagania wstępne — Konwertuj plik programu Excel na Arkusze Google w języku C#

Projekt Google Cloud

Aby komunikować się z Arkuszami Google, będziemy musieli utworzyć projekt w Google Cloud i włączyć Google Sheets API. Poniżej przedstawiono kroki tworzenia projektu i włączania interfejsu API.

  1. Przejdź do konsoli Google Cloud.
  2. Utwórz nowy projekt na konsoli.
    • Wybierz właśnie utworzony projekt.
  3. Z menu nawigacyjnego wybierz Interfejsy API i usługi, a następnie Pulpit nawigacyjny.
    • Kliknij przycisk Włącz interfejsy API i usługi (zobacz szczegóły).
    • Wyszukaj i włącz interfejs API Arkuszy Google.
  4. Konfiguruj ekran zgody OAuth i ustaw zakresy aplikacji.
    • Dodaj użytkowników testowych, którzy są wykorzystywani, gdy aplikacja nie jest publikowana.
  5. Na stronie Interfejsy API i usługi przejdź do zakładki Poświadczenia.
    • Kliknij przycisk Utwórz poświadczenia i wybierz Identyfikator klienta OAuth.
    • W typie aplikacji wybierz Desktop App (ponieważ w tym artykule tworzymy aplikację konsolową).
    • Pobierz plik JSON.

Interfejsy API platformy C# .NET do konwersji programu Excel na Arkusze Google

Aby wyeksportować dane z plików Excel XLS/XLSX do Arkuszy Google, będziemy potrzebować następujących interfejsów API.

W momencie pisania tego artykułu korzystaliśmy z Aspose.Cells for .NET 22.2 i Google.Apis.Sheets.v4 1.56.0.2608.

Eksportuj dane z Excela XLSX do Arkuszy Google w C#

Poniżej znajduje się przewodnik krok po kroku, jak odczytywać dane z pliku Excel XLSX i zapisywać je w Arkuszach Google w aplikacji konsolowej C#.

  1. Utwórz nowy projekt aplikacji konsolowej w programie Visual Studio 2013 lub nowszym.
Eksportuj dane z Excela XLSX do Arkuszy Google w C#
  1. Zainstaluj w projekcie interfejsy API Aspose.Cells for .NET i Google Sheets.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. Skopiuj plik JSON (pobraliśmy po utworzeniu poświadczeń w Google Cloud) i wklej go do katalogu projektu.

  2. Zainicjuj usługę Arkusze Google przy użyciu poświadczeń (plik JSON) i zdefiniuj zakresy aplikacji. Zakresy określają uprawnienia dostępu do arkuszy i ich właściwości. Poniższa funkcja inicjuje usługę Arkusze Google i zwraca obiekt SheetsService.

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

public static SheetsService ConnectToGoogle()
{
    // Jeśli modyfikujesz te zakresy, usuń wcześniej zapisane poświadczenia
    // w ~/.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))
    {
        // Plik token.json przechowuje tokeny dostępu i odświeżania użytkownika i jest tworzony
        // automatycznie, gdy przepływ autoryzacji zakończy się po raz pierwszy.
        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);
    }

    // Utwórz usługę interfejsu API Arkuszy Google
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Utwórz funkcję CreateSpreadsheet, która tworzy nowy arkusz kalkulacyjny w Arkuszach Google, ustawia nazwę arkusza domyślnego i zwraca obiekt 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)
{
    // Utwórz nowy arkusz kalkulacyjny
    var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
    newSpreadSheet.Properties = new SpreadsheetProperties();
    newSpreadSheet.Properties.Title = _spreadsheetName;

    // Utwórz nowy arkusz
    var sheet = new Sheet();
    sheet.Properties = new SheetProperties();
    sheet.Properties.Title = _defaultSheetName;
    newSpreadSheet.Sheets = new List<Sheet>() { sheet };

    // Wykonaj żądanie
    var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

    return newSheet;
}
  1. Utwórz funkcję AddSheet, aby dodać nowy arkusz w arkuszu kalkulacyjnym Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
    // Dodaj nowy arkusz
    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
    });

    // Utwórz żądanie
    var batchUpdateRequest =
        _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

    // Wykonaj żądanie
    var response = batchUpdateRequest.Execute();

}
  1. Teraz utwórz nową funkcję ExportDataFromExcelToGoogleSheet, która odczytuje i eksportuje dane z pliku Excel do Arkuszy Google. W tej funkcji najpierw załaduj plik Excel XLS/XLSX za pomocą Aspose.Cells for .NET i uzyskaj nazwę pierwszego arkusza w skoroszycie.
// Załaduj skoroszyt programu Excel
Workbook wb = new Workbook(_excelFileName);

// Pobierz nazwę pierwszego arkusza
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. Następnie wywołaj funkcję CreateSpreadsheet, aby utworzyć nowy arkusz kalkulacyjny w Arkuszach Google.
// Utwórz nowy arkusz kalkulacyjny Google z domyślnym arkuszem roboczym
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. Przejrzyj w pętli arkusze w pliku Excel. W każdej iteracji odczytuj dane z arkusza i dodaj je do listy.
// Przejrzyj arkusze robocze w pętli
foreach (var sheet in wb.Worksheets)
{
    if (sheet.Index == 0)
    {
        // Domyślnie tworzony jest pierwszy arkusz, więc ustaw tylko zakres
        range = $"{defaultWorksheetName}!A:Y";
    }
    else
    {
        // Dodaj nowy arkusz
        AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
        range = $"{sheet.Name}!A:Y";
    }

    // Uzyskaj liczbę wierszy i kolumn
    int rows = sheet.Cells.MaxDataRow;
    int cols = sheet.Cells.MaxDataColumn;

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

    // Zapętlaj rzędy
   for (int i = 0; i < rows; i++)
    {
        List<object> lists = new List<object>();

        // Przejdź przez każdą kolumnę w wybranym rzędzie
       for (int j = 0; j < cols; j++)
        {
            lists.Add(sheet.Cells[i, j].Value);
        }
        list.Add(lists);
    }
}
  1. Dla każdego arkusza w pliku Excel utwórz żądanie zapisania danych do arkusza kalkulacyjnego w Arkuszach Google.
// Zdefiniuj zakres
ValueRange VRange = new ValueRange();
VRange.Range = range;

// Ustaw wartości
VRange.Values = list;

// Utwórz żądanie
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

// Wykonaj żądanie
UpdateValuesResponse response = upd.Execute();

// Otrzymać odpowiedź
string responseString = JsonConvert.SerializeObject(response);

Poniżej przedstawiono pełną funkcję eksportu danych z pliku Excel do arkusza kalkulacyjnego w Arkuszach 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)
{
    // Załaduj skoroszyt programu Excel
    Workbook wb = new Workbook(_excelFileName);

    // Pobierz nazwę pierwszego arkusza
    string defaultWorksheetName = wb.Worksheets[0].Name;

    // Utwórz nowy arkusz kalkulacyjny Google z domyślnym arkuszem roboczym
    Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

    // Zdefiniuj zakres
    String range;

    // Przejrzyj arkusze robocze w pętli
    foreach (var sheet in wb.Worksheets)
    {
        if (sheet.Index == 0)
        {
            // Domyślnie tworzony jest pierwszy arkusz, więc ustaw tylko zakres
            range = $"{defaultWorksheetName}!A:Y";
        }
        else
        {
            // Dodaj nowy arkusz
            AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
            range = $"{sheet.Name}!A:Y";
        }

        // Uzyskaj liczbę wierszy i kolumn
        int rows = sheet.Cells.MaxDataRow;
        int cols = sheet.Cells.MaxDataColumn;

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

        // Zapętlaj rzędy
       for (int i = 0; i < rows; i++)
        {
            List<object> lists = new List<object>();

            // Przejdź przez każdą kolumnę w wybranym rzędzie
           for (int j = 0; j < cols; j++)
            {
                lists.Add(sheet.Cells[i, j].Value);
            }
            list.Add(lists);
        }

        // Zdefiniuj zakres
        ValueRange VRange = new ValueRange();
        VRange.Range = range;

        // Ustaw wartości
        VRange.Values = list;

        // Utwórz żądanie
        SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
        upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

        // Wykonaj żądanie
        UpdateValuesResponse response = upd.Execute();

        // Otrzymać odpowiedź
        string responseString = JsonConvert.SerializeObject(response);
    }
}

Kompletny kod źródłowy

Poniżej znajduje się pełny kod źródłowy do konwersji pliku Excel XLSX na Arkusze Google w języku 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)
        {
            // Połącz się z Google
            SheetsService sheetService = ConnectToGoogle();

            // Eksportuj dane z pliku Excel do Arkuszy Google
            ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");

            Console.ReadKey();
        }
        public static SheetsService ConnectToGoogle()
        {
            // Jeśli modyfikujesz te zakresy, usuń wcześniej zapisane poświadczenia
            // w ~/.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))
            {
                // Plik token.json przechowuje tokeny dostępu i odświeżania użytkownika i jest tworzony
                // automatycznie, gdy przepływ autoryzacji zakończy się po raz pierwszy.
                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);
            }

            // Utwórz usługę interfejsu API Arkuszy Google
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // Załaduj skoroszyt programu Excel
            Workbook wb = new Workbook(_excelFileName);

            // Pobierz nazwę pierwszego arkusza
            string defaultWorksheetName = wb.Worksheets[0].Name;

            // Utwórz nowy arkusz kalkulacyjny Google z domyślnym arkuszem roboczym
            Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

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

            // Zdefiniuj zakres
            String range;

            // Przejrzyj arkusze robocze w pętli
            foreach (var sheet in wb.Worksheets)
            {
                if (sheet.Index == 0)
                {
                    // Domyślnie tworzony jest pierwszy arkusz, więc ustaw tylko zakres
                    range = $"{defaultWorksheetName}!A:Y";
                }
                else
                {
                    // Dodaj nowy arkusz
                    AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
                    range = $"{sheet.Name}!A:Y";
                }

                // Uzyskaj liczbę wierszy i kolumn
                int rows = sheet.Cells.MaxDataRow;
                int cols = sheet.Cells.MaxDataColumn;

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

                // Zapętlaj rzędy
               for (int i = 0; i < rows; i++)
                {
                    List<object> lists = new List<object>();

                    // Przejdź przez każdą kolumnę w wybranym rzędzie
                   for (int j = 0; j < cols; j++)
                    {
                        lists.Add(sheet.Cells[i, j].Value);
                    }
                    list.Add(lists);
                }

                // Zdefiniuj zakres
                ValueRange VRange = new ValueRange();
                VRange.Range = range;

                // Ustaw wartości
                VRange.Values = list;

                // Utwórz żądanie
                SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
                upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;

                // Wykonaj żądanie
                UpdateValuesResponse response = upd.Execute();

                // Otrzymać odpowiedź
                string responseString = JsonConvert.SerializeObject(response);
            }

        }
        public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
        {
            // Utwórz nowy arkusz kalkulacyjny
            var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
            newSpreadSheet.Properties = new SpreadsheetProperties();
            newSpreadSheet.Properties.Title = _spreadsheetName;

            // Utwórz nowy arkusz
            var sheet = new Sheet();
            sheet.Properties = new SheetProperties();
            sheet.Properties.Title = _defaultSheetName;
            newSpreadSheet.Sheets = new List<Sheet>() { sheet };

            // Wykonaj żądanie
            var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();

            return newSheet;

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

            // Utwórz żądanie
            var batchUpdateRequest =
                _sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);

            // Wykonaj żądanie
            var response = batchUpdateRequest.Execute();
        }
    }
}

Demo - Konwertuj Excel na Arkusze Google w C#

Uzyskaj bezpłatną licencję Aspose.Cells

Możesz otrzymać bezpłatną licencję tymczasową i używać Aspose.Cells for .NET bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule nauczyłeś się, jak konwertować pliki Excel XLS lub XLSX do Arkuszy Google w języku C#. Omówiliśmy, jak utworzyć projekt w Google Cloud, włączyć Google Sheets API, czytać pliki Excela i eksportować dane z plików Excela do Arkuszy Google. Poza tym możesz poznać inne funkcje Aspose.Cells for .NET korzystając z dokumentacji. Możesz także zadawać pytania za pośrednictwem naszego forum.

Zobacz też