本文介紹如何在 C# .NET 中以編程方式將 MS Excel XLS 或 XLSX 轉換為 Google 表格。

電子表格通常用於以行和列的形式存儲小型或大型數據。可以使用各種應用程序來創建和操作電子表格,其中 MS Excel 是一種流行的應用程序。此外,Google 還提供 Google Sheets,用於在線創建和更新電子表格。此外,Google 表格可讓您與多人實時共享電子表格。在某些情況下,您可能需要以編程方式將數據從 Excel XLS 或 XLSX 文件導出到 Google 表格中的電子表格。因此,讓我們看看如何從 Excel 文件中讀取數據並將其寫入 C# .NET 中的 Google 表格電子表格。
先決條件 - 在 C# 中將 Excel 文件轉換為 Google 表格
谷歌云項目
要與 Google Sheets 通信,我們必須在 Google Cloud 上創建一個項目並啟用 Google Sheets API。以下是創建項目和啟用 API 的步驟。
- 轉到 Google Cloud 控制台。
- 創建一個新項目 在控制台上。
- 選擇剛剛創建的項目。
- 從導航菜單中,選擇 API 和服務,然後選擇儀表板。
- 單擊啟用 API 和服務按鈕(查看詳細信息)。
- 搜索並啟用 Google Sheets API。
- 配置 OAuth 同意屏幕 並設置應用程序的範圍。
- 添加測試用戶,在應用程序未發佈時使用。
- 在 APIs and Services 頁面上,轉到 Credentials。
- 單擊創建憑據按鈕並選擇 OAuth 客戶端 ID。
- 在應用程序類型中,選擇桌面應用程序(因為我們在本文中創建了一個控制台應用程序)。
- 下載 JSON 文件。
用於 Excel 到 Google 表格轉換的 C# .NET API
要將數據從 Excel XLS/XLSX 文件導出到 Google 表格,我們需要以下 API。
- .NET 的 Aspose.Cells - 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 APIs。
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
複製 JSON 文件(我們在 Google Cloud 中創建憑證後下載)並將其粘貼到項目目錄中。
使用憑據(JSON 文件)初始化 Google 表格服務並定義應用程序的範圍。範圍定義了對工作表及其屬性的訪問權限。以下函數初始化 Google 表格服務並返回 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 的其他功能。此外,您可以通過我們的 論壇 提問。