本文介绍如何在 C# .NET 中以编程方式将 MS Excel XLS 或 XLSX 转换为 Google 表格。
电子表格通常用于以行和列的形式存储小型或大型数据。可以使用各种应用程序来创建和操作电子表格,其中 MS Excel 是一种流行的应用程序。此外,Google 还提供 Google Sheets,用于在线创建和更新电子表格。此外,Google 表格可让您与多人实时共享电子表格。在某些情况下,您可能需要以编程方式将 Excel XLS 或 XLSX 文件中的数据导出到 Google 表格中的电子表格。因此,让我们看看如何从 Excel 文件中读取数据并将其写入 C# .NET 中的 Google Sheets 电子表格。
先决条件 - 在 C# 中将 Excel 文件转换为 Google 表格
谷歌云项目
要与 Google Sheets 通信,我们必须在 Google Cloud 上创建一个项目并启用 Google Sheets API。以下是创建项目和启用 API 的步骤。
- 转到 Google Cloud 控制台。
- 创建一个新项目 在控制台上。
- 选择您刚刚创建的项目。
- 从导航菜单中,选择 API 和服务,然后选择仪表板。
- 单击启用 API 和服务按钮(查看详细信息)。
- 搜索并启用 Google Sheets API。
- 配置 OAuth 同意屏幕 并设置应用程序的范围。
- 添加测试用户,在应用未发布时使用。
- 在 API 和服务 页面上,转到凭据。
- 单击创建凭据按钮并选择 OAuth 客户端 ID。
- 在应用程序类型中,选择桌面应用程序(因为我们在本文中创建一个控制台应用程序)。
- 下载 JSON 文件。
用于 Excel 到 Google 表格转换的 C# .NET API
要将 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。
在 C# 中将数据从 Excel XLSX 导出到 Google 表格
以下是有关如何在 C# 控制台应用程序中从 Excel XLSX 文件读取数据并将其写入 Google 表格的分步指南。
- 在 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 中创建凭据后下载的)并将其粘贴到项目目录中。
使用凭据(JSON 文件)初始化 Google 表格服务并定义应用程序的范围。范围定义了对工作表及其属性的访问权限。以下函数初始化 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 表格 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 表格。在此函数中,首先,使用 Aspose.Cells for .NET 加载 Excel XLS/XLSX 文件,并获取工作簿中第一个工作表的名称。
// 加载 Excel 工作簿
Workbook wb = new Workbook(_excelFileName);
// 获取第一个工作表的名称
string defaultWorksheetName = wb.Worksheets[0].Name;
- 然后,调用 CreateSpreadsheet 函数在 Google 表格上创建一个新的电子表格。
// 使用默认工作表创建新的 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);
}
}
完整的源代码
以下是用 C# 将 Excel XLSX 文件转换为 Google 表格的完整源代码。
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)
{
// 连接到谷歌
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 表格 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();
}
}
}
演示 - 在 C# 中将 Excel 转换为 Google 表格
获得免费的 Aspose.Cells 许可证
您可以获得免费的 临时许可证 并使用 Aspose.Cells for .NET,没有评估限制。
结论
在本文中,您学习了如何使用 C# 将 Excel XLS 或 XLSX 文件转换为 Google 表格。我们已经介绍了如何在 Google Cloud 上创建项目、启用 Google Sheets API、读取 Excel 文件以及将数据从 Excel 文件导出到 Google Sheets。此外,您可以使用 文档 探索 Aspose.Cells for .NET 的其他功能。此外,您可以通过我们的 论坛 提问。