В этой статье рассказывается, как программно конвертировать MS Excel XLS или XLSX в Google Sheets на C# .NET.
Электронные таблицы обычно используются для хранения небольших или крупномасштабных данных в виде строк и столбцов. Для создания электронных таблиц и управления ими доступны различные приложения, среди которых популярным является MS Excel. Кроме того, Google предоставляет Google Таблицы, которые используются для создания и обновления электронных таблиц в Интернете. Кроме того, Google Sheets позволяет вам делиться электронными таблицами с несколькими людьми в режиме реального времени. В некоторых случаях вам может потребоваться программно экспортировать данные из файлов Excel XLS или XLSX в электронную таблицу в Google Sheets. Итак, давайте посмотрим, как вы можете считывать данные из файла Excel и записывать их в электронную таблицу Google Sheets на C# .NET.
Предварительные требования — преобразование файла Excel в таблицы Google на C#
Облачный проект Google
Для связи с Google Sheets нам нужно будет создать проект в Google Cloud и включить Google Sheets API. Ниже приведены шаги для создания проекта и включения API.
- Перейдите в консоль Google Cloud.
- Создайте новый проект на консоли.
- Выберите только что созданный проект.
- В меню навигации выберите «API и службы», а затем «Панель мониторинга».
- Нажмите кнопку «Включить API и службы» (см. подробности).
- Найдите и включите Google Sheets API.
- Настроить экран согласия OAuth и установить области действия приложения.
- Добавьте тестовых пользователей, которые используются, когда приложение не опубликовано.
- На странице API и службы перейдите в раздел Учетные данные.
- Нажмите кнопку «Создать учетные данные» и выберите идентификатор клиента OAuth.
- В типе приложения выберите Desktop App (поскольку в этой статье мы создаем консольное приложение).
- Загрузите файл JSON.
C# .NET API для преобразования Excel в Google Sheets
Для экспорта данных из файлов Excel XLS/XLSX в Google Таблицы нам потребуются следующие API.
- Aspose.Cells для .NET - To read the data from Excel files.
- Google.Apis.Таблицы.v4 - To create and update spreadsheets on Google Sheets.
На момент написания этой статьи мы использовали Aspose.Cells для .NET 22.2 и Google.Apis.Sheets.v4 1.56.0.2608.
Экспорт данных из Excel XLSX в Google Таблицы на C#
Ниже приведено пошаговое руководство о том, как считывать данные из файла Excel XLSX и записывать их в Google Sheets в консольном приложении C#.
- Создайте новый проект консольного приложения в Visual Studio 2013 или более поздней версии.
- Установите Aspose.Cells для .NET и API Google Sheets в проект.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
Скопируйте файл JSON (мы загрузили его после создания учетных данных в Google Cloud) и вставьте его в каталог проекта.
Инициализируйте службу Google Таблиц, используя учетные данные (файл 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);
}
// Создать службу API Google Таблиц
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
- Создайте функцию CreateSpreadsheet, которая создает новую электронную таблицу в Google Sheets, устанавливает имя листа по умолчанию и возвращает объект электронной таблицы.
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 для .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 Sheets.
// Определить диапазон
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);
}
// Создать службу API Google Таблиц
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 для .NET без ограничений на пробную версию.
Вывод
В этой статье вы узнали, как конвертировать файлы Excel XLS или XLSX в Google Таблицы на C#. Мы рассмотрели, как создать проект в Google Cloud, включить API Google Таблиц, прочитать файлы Excel и экспортировать данные из файлов Excel в Google Таблицы. Кроме того, вы можете изучить другие возможности Aspose.Cells для .NET с помощью документации. Также вы можете задать свои вопросы на нашем форуме.