Bài viết này trình bày cách chuyển đổi MS Excel XLS hoặc XLSX sang Google Trang tính theo lập trình trong C# .NET.
Bảng tính thường được sử dụng để lưu trữ dữ liệu quy mô nhỏ hoặc lớn dưới dạng hàng và cột. Có nhiều ứng dụng khác nhau để tạo và thao tác trên bảng tính, trong đó MS Excel là một ứng dụng phổ biến. Bên cạnh đó, Google cung cấp Google Trang tính, được sử dụng để tạo và cập nhật bảng tính trực tuyến. Ngoài ra, Google Trang tính cho phép bạn chia sẻ bảng tính với nhiều người trong thời gian thực. Trong một số trường hợp nhất định, bạn có thể cần xuất dữ liệu từ tệp Excel XLS hoặc XLSX sang bảng tính trong Google Trang tính theo lập trình. Vì vậy, hãy xem cách bạn có thể đọc dữ liệu từ tệp Excel và ghi dữ liệu đó vào bảng tính của Google Trang tính trong C# .NET.
Điều kiện tiên quyết - Chuyển đổi tệp Excel sang Google Trang tính trong C#
Dự án đám mây của Google
Để giao tiếp với Google Trang tính, chúng tôi sẽ phải tạo một dự án trên Google Cloud và bật API Google Trang tính. Sau đây là các bước để tạo một dự án và kích hoạt API.
- Đi tới bảng điều khiển Google Cloud.
- Tạo một dự án mới trên bảng điều khiển.
- Chọn dự án bạn vừa tạo.
- Từ menu điều hướng, chọn API và Dịch vụ, sau đó chọn Trang tổng quan.
- Nhấp vào nút Bật API và Dịch vụ (xem chi tiết).
- Tìm kiếm và bật API Google Trang tính.
- Định cấu hình Màn hình đồng ý OAuth và đặt phạm vi ứng dụng.
- Thêm người dùng thử nghiệm, được sử dụng khi ứng dụng chưa được xuất bản.
- Trên trang API và dịch vụ, chuyển đến Thông tin đăng nhập.
- Nhấp vào nút Tạo thông tin xác thực và chọn ID ứng dụng khách OAuth.
- Trong loại ứng dụng, chọn Ứng dụng dành cho máy tính để bàn (vì chúng tôi đang tạo ứng dụng bảng điều khiển trong phần mềm này).
- Tải xuống tệp JSON.
Các API C# .NET dành cho Chuyển đổi Excel sang Google Trang tính
Để xuất dữ liệu từ tệp Excel XLS / XLSX sang Google Trang tính, chúng tôi sẽ cần các API sau.
- Aspose.Cells for .NET - To read the data from Excel files.
- Google.Apis.Sheets.v4 - To create and update spreadsheets on Google Sheets.
Tại thời điểm viết bài này, chúng tôi đã sử dụng Aspose.Cells for .NET 22.2 và Google.Apis.Sheets.v4 1.56.0.2608.
Xuất dữ liệu từ Excel XLSX sang Google Trang tính trong C#
Sau đây là hướng dẫn từng bước về cách đọc dữ liệu từ tệp Excel XLSX và ghi dữ liệu đó vào Google Trang tính trong ứng dụng bảng điều khiển C#.
- Tạo một dự án ứng dụng bảng điều khiển mới trong Visual Studio 2013 trở lên.
- Cài đặt Aspose.Cells cho các API .NET và Google Trang tính trong dự án.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
Sao chép tệp JSON (chúng tôi đã tải xuống sau khi tạo thông tin đăng nhập trong Google Cloud) và dán vào thư mục của dự án.
Khởi tạo dịch vụ Google Trang tính bằng thông tin đăng nhập (tệp JSON) và xác định phạm vi của ứng dụng. Phạm vi xác định quyền truy cập vào trang tính và thuộc tính của chúng. Hàm sau khởi chạy dịch vụ Google Trang tính và trả về đối tượng SheetsService.
using Google.Apis.Auth.OAuth2;
using Google.Apis.Sheets.v4;
using Google.Apis.Services;
using Google.Apis.Util.Store;
public static SheetsService ConnectToGoogle()
{
// Nếu sửa đổi các phạm vi này, hãy xóa thông tin đăng nhập đã lưu trước đó của bạn
// tại ~ / .credentials / sheet.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))
{
// Tệp token.json lưu trữ mã thông báo truy cập và làm mới của người dùng, đồng thời được tạo
// tự động khi quy trình ủy quyền hoàn tất lần đầu tiên.
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);
}
// Tạo dịch vụ API Google Trang tính
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
- Tạo chức năng CreateS Spreadsheet để tạo một bảng tính mới trên Google Sheets, đặt tên cho trang tính mặc định và trả về một đối tượng Bảng tính.
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)
{
// Tạo một bảng tính mới
var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
newSpreadSheet.Properties = new SpreadsheetProperties();
newSpreadSheet.Properties.Title = _spreadsheetName;
// Tạo một trang tính mới
var sheet = new Sheet();
sheet.Properties = new SheetProperties();
sheet.Properties.Title = _defaultSheetName;
newSpreadSheet.Sheets = new List<Sheet>() { sheet };
// Thực hiện yêu cầu
var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();
return newSheet;
}
- Tạo chức năng AddSheet để thêm một trang tính mới trong bảng tính Google.
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
// Thêm trang tính mới
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
});
// Tạo yêu cầu
var batchUpdateRequest =
_sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);
// Thực hiện yêu cầu
var response = batchUpdateRequest.Execute();
}
- Bây giờ, hãy tạo một hàm mới ExportDataFromExcelToGoogleSheet, hàm này đọc và xuất dữ liệu từ tệp Excel sang Google Trang tính. Trong chức năng này, trước tiên, hãy tải tệp Excel XLS / XLSX bằng Aspose.Cells for .NET và lấy tên của trang tính đầu tiên trong sổ làm việc.
// Tải sổ làm việc Excel
Workbook wb = new Workbook(_excelFileName);
// Lấy tên của trang tính đầu tiên
string defaultWorksheetName = wb.Worksheets[0].Name;
- Sau đó, gọi chức năng CreateS Spreadsheet để tạo một bảng tính mới trên Google Sheets.
// Tạo bảng tính Google mới với trang tính mặc định
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
- Lặp qua các trang tính trong tệp Excel. Trong mỗi lần lặp, hãy đọc dữ liệu từ trang tính và thêm nó vào danh sách.
// Lặp qua các trang tính
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Trang tính đầu tiên được tạo theo mặc định, vì vậy chỉ đặt phạm vi
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Thêm một trang tính mới
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Nhận số hàng và cột
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Lặp qua các hàng
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Lặp qua từng cột trong hàng đã chọn
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
}
- Đối với mỗi trang tính trong tệp Excel, hãy tạo yêu cầu ghi dữ liệu vào bảng tính trong Google Trang tính.
// Xác định phạm vi
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Đặt giá trị
VRange.Values = list;
// Tạo yêu cầu
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Thực hiện yêu cầu
UpdateValuesResponse response = upd.Execute();
// Nhận được phản ứng
string responseString = JsonConvert.SerializeObject(response);
Dưới đây là chức năng hoàn chỉnh để xuất dữ liệu từ tệp Excel sang bảng tính trong Google Trang tính.
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)
{
// Tải sổ làm việc Excel
Workbook wb = new Workbook(_excelFileName);
// Lấy tên của trang tính đầu tiên
string defaultWorksheetName = wb.Worksheets[0].Name;
// Tạo bảng tính Google mới với trang tính mặc định
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
Console.WriteLine("URL: " + spreadhsheet.SpreadsheetUrl);
Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);
// Xác định phạm vi
String range;
// Lặp qua các trang tính
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Trang tính đầu tiên được tạo theo mặc định, vì vậy chỉ đặt phạm vi
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Thêm một trang tính mới
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Nhận số hàng và cột
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Lặp qua các hàng
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Lặp qua từng cột trong hàng đã chọn
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
// Xác định phạm vi
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Đặt giá trị
VRange.Values = list;
// Tạo yêu cầu
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Thực hiện yêu cầu
UpdateValuesResponse response = upd.Execute();
// Nhận được phản ứng
string responseString = JsonConvert.SerializeObject(response);
}
}
Hoàn thành mã nguồn
Sau đây là mã nguồn hoàn chỉnh để chuyển đổi tệp Excel XLSX sang Google Trang tính trong 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)
{
// Kết nối với Google
SheetsService sheetService = ConnectToGoogle();
// Xuất dữ liệu từ tệp Excel sang Google Trang tính
ExportDataFromExcelToGoogleSheet(sheetService, "workbook.xlsx");
Console.ReadKey();
}
public static SheetsService ConnectToGoogle()
{
// Nếu sửa đổi các phạm vi này, hãy xóa thông tin đăng nhập đã lưu trước đó của bạn
// tại ~ / .credentials / sheet.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))
{
// Tệp token.json lưu trữ mã thông báo truy cập và làm mới của người dùng, đồng thời được tạo
// tự động khi quy trình ủy quyền hoàn tất lần đầu tiên.
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);
}
// Tạo dịch vụ API Google Trang tính
var service = new SheetsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
return service;
}
public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
{
// Tải sổ làm việc Excel
Workbook wb = new Workbook(_excelFileName);
// Lấy tên của trang tính đầu tiên
string defaultWorksheetName = wb.Worksheets[0].Name;
// Tạo bảng tính Google mới với trang tính mặc định
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
Console.WriteLine("Spreadsheet URL: " + spreadhsheet.SpreadsheetUrl);
Console.WriteLine("ID: " + spreadhsheet.SpreadsheetId);
// Xác định phạm vi
String range;
// Lặp qua các trang tính
foreach (var sheet in wb.Worksheets)
{
if (sheet.Index == 0)
{
// Trang tính đầu tiên được tạo theo mặc định, vì vậy chỉ đặt phạm vi
range = $"{defaultWorksheetName}!A:Y";
}
else
{
// Thêm một trang tính mới
AddSheet(_sheetService, spreadhsheet.SpreadsheetId, sheet.Name);
range = $"{sheet.Name}!A:Y";
}
// Nhận số hàng và cột
int rows = sheet.Cells.MaxDataRow;
int cols = sheet.Cells.MaxDataColumn;
IList<IList<Object>> list = new List<IList<Object>>() { };
// Lặp qua các hàng
for (int i = 0; i < rows; i++)
{
List<object> lists = new List<object>();
// Lặp qua từng cột trong hàng đã chọn
for (int j = 0; j < cols; j++)
{
lists.Add(sheet.Cells[i, j].Value);
}
list.Add(lists);
}
// Xác định phạm vi
ValueRange VRange = new ValueRange();
VRange.Range = range;
// Đặt giá trị
VRange.Values = list;
// Tạo yêu cầu
SpreadsheetsResource.ValuesResource.UpdateRequest upd = _sheetService.Spreadsheets.Values.Update(VRange, spreadhsheet.SpreadsheetId, range);
upd.ValueInputOption = SpreadsheetsResource.ValuesResource.UpdateRequest.ValueInputOptionEnum.USERENTERED;
// Thực hiện yêu cầu
UpdateValuesResponse response = upd.Execute();
// Nhận được phản ứng
string responseString = JsonConvert.SerializeObject(response);
}
}
public static Spreadsheet CreateSpreadsheet(SheetsService _sheetsService, string _spreadsheetName, string _defaultSheetName)
{
// Tạo một bảng tính mới
var newSpreadSheet = new Google.Apis.Sheets.v4.Data.Spreadsheet();
newSpreadSheet.Properties = new SpreadsheetProperties();
newSpreadSheet.Properties.Title = _spreadsheetName;
// Tạo một trang tính mới
var sheet = new Sheet();
sheet.Properties = new SheetProperties();
sheet.Properties.Title = _defaultSheetName;
newSpreadSheet.Sheets = new List<Sheet>() { sheet };
// Thực hiện yêu cầu
var newSheet = _sheetsService.Spreadsheets.Create(newSpreadSheet).Execute();
return newSheet;
}
public static void AddSheet(SheetsService _sheetsService, string _spreadSheetID, string _sheetName)
{
// Thêm trang tính mới
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
});
// Tạo yêu cầu
var batchUpdateRequest =
_sheetsService.Spreadsheets.BatchUpdate(batchUpdateSpreadsheetRequest, _spreadSheetID);
// Thực hiện yêu cầu
var response = batchUpdateRequest.Execute();
}
}
}
Demo - Chuyển đổi Excel sang Google Trang tính trong C#
Nhận giấy phép Aspose.Cells miễn phí
Bạn có thể nhận giấy phép tạm thời miễn phí và sử dụng Aspose.Cells for .NET mà không có giới hạn đánh giá.
Sự kết luận
Trong bài viết này, bạn đã học cách chuyển đổi tệp Excel XLS hoặc XLSX sang Google Trang tính trong C#. Chúng tôi đã trình bày cách tạo dự án trên Google Cloud, bật API Google Trang tính, đọc tệp Excel và xuất dữ liệu từ tệp Excel sang Google Trang tính. Bên cạnh đó, bạn có thể khám phá các tính năng khác của Aspose.Cells for .NET bằng cách sử dụng tài liệu. Ngoài ra, bạn có thể đặt câu hỏi của mình qua diễn đàn của chúng tôi.