У цій статті розповідається про те, як програмно конвертувати MS 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.
- Перейдіть до консолі Google Cloud.
- Створіть новий проект на консолі.
- Виберіть проект, який ви щойно створили.
- У навігаційному меню виберіть APIs and Services, а потім Dashboard.
- Натисніть кнопку «Увімкнути API та служби» (докладніше).
- Знайдіть і ввімкніть API Google Таблиць.
- Налаштуйте екран згоди OAuth і встановіть області застосування.
- Додайте тестових користувачів, які використовуються, коли додаток не опубліковано.
- На сторінці API та служби перейдіть до облікових даних.
- Натисніть кнопку «Створити облікові дані» та виберіть ідентифікатор клієнта OAuth.
- У типі програми виберіть «Настільна програма» (оскільки ми створюємо консольну програму в цій статті).
- Завантажте файл JSON.
C# .NET API для перетворення Excel у таблиці Google
Щоб експортувати дані з файлів Excel XLS/XLSX у Google Таблиці, нам знадобляться такі API.
- Aspose.Cells for .NET - To read the data from Excel files.
- Google.Apis.Sheets.v4 - To create and update spreadsheets on Google Sheets.
На момент написання цієї статті ми використовували Aspose.Cells for .NET 22.2 і Google.Apis.Sheets.v4 1.56.0.2608.
Експорт даних із Excel XLSX до Google Таблиць у C#
Нижче наведено покроковий посібник із читання даних із файлу Excel XLSX і запису їх у таблиці Google у консольній програмі C#.
- Створіть новий проект консольної програми у Visual Studio 2013 або новішої версії.
- Встановіть Aspose.Cells for .NET і Google Sheets API у проекті.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
Скопіюйте файл JSON (ми завантажили після створення облікових даних у Google Cloud) і вставте його в каталог проекту.
Ініціалізуйте службу 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;
}
- Створіть функцію 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;
}
- Створіть функцію 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();
}
- Тепер створіть нову функцію ExportDataFromExcelToGoogleSheet, яка зчитує та експортує дані з файлу Excel до Google Таблиць. У цій функції спочатку завантажте файл Excel XLS/XLSX за допомогою Aspose.Cells for .NET і отримайте назву першого аркуша в книзі.
// Завантажте книгу Excel
Workbook wb = new Workbook(_excelFileName);
// Отримайте назву першого аркуша
string defaultWorksheetName = wb.Worksheets[0].Name;
- Потім викличте функцію CreateSpreadsheet, щоб створити нову електронну таблицю в Google Sheets.
// Створіть нову електронну таблицю Google із аркушем за умовчанням
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
- Перегляньте аркуші у файлі 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);
}
}
- Для кожного робочого аркуша у файлі 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 за допомогою документації. Ви також можете поставити свої запитання через наш форум.