W tym artykule opisano, jak programowo przekonwertować MS Excel XLS lub XLSX na Arkusze Google w języku 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
Kroki, aby wyeksportować dane z programu Excel XLSX do Arkuszy Google
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.
- Przejdź do konsoli Google Cloud.
- Utwórz nowy projekt na konsoli.
- Wybierz właśnie utworzony projekt.
- 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.
- Konfiguruj ekran zgody OAuth i ustaw zakresy aplikacji.
- Dodaj użytkowników testowych, którzy są wykorzystywani, gdy aplikacja nie jest publikowana.
- 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.
- Aspose.Cells for .NET - To read the data from Excel files.
- Google.Apis.Sheets.v4 - To create and update spreadsheets on Google Sheets.
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#.
- Utwórz nowy projekt aplikacji konsolowej w programie Visual Studio 2013 lub nowszym.
- Zainstaluj w projekcie interfejsy API Aspose.Cells for .NET i Google Sheets.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
Skopiuj plik JSON (pobraliśmy po utworzeniu poświadczeń w Google Cloud) i wklej go do katalogu projektu.
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;
}
- 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;
}
- 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();
}
- 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;
- 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);
- 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);
}
}
- 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.