บทความนี้ครอบคลุมวิธีการแปลง MS Excel XLS หรือ XLSX เป็น Google ชีตโดยทางโปรแกรมใน C# .NET
สเปรดชีตมักใช้สำหรับจัดเก็บข้อมูลขนาดเล็กหรือขนาดใหญ่ในรูปแบบของแถวและคอลัมน์ มีแอปพลิเคชันมากมายสำหรับสร้างและจัดการสเปรดชีต ซึ่ง MS Excel เป็นที่นิยม นอกจากนี้ Google ยังมี Google ชีต ซึ่งใช้สร้างและอัปเดตสเปรดชีตออนไลน์ นอกจากนี้ Google ชีตยังให้คุณแบ่งปันสเปรดชีตกับหลายๆ คนแบบเรียลไทม์ ในบางกรณี คุณอาจต้องส่งออกข้อมูลจากไฟล์ Excel XLS หรือ XLSX ไปยังสเปรดชีตใน Google ชีตโดยทางโปรแกรม มาดูกันว่าคุณจะอ่านข้อมูลจากไฟล์ Excel และเขียนลงในสเปรดชีตของ Google ชีตใน C# .NET ได้อย่างไร
ข้อกำหนดเบื้องต้น - แปลงไฟล์ Excel เป็น Google ชีตใน C#
โครงการ Google Cloud
ในการสื่อสารกับ Google ชีต เราจะต้องสร้างโครงการบน Google Cloud และเปิดใช้งาน Google ชีต API ต่อไปนี้เป็นขั้นตอนในการสร้างโครงการและเปิดใช้งาน API
- ไปที่คอนโซล Google Cloud
- สร้างโครงการใหม่ บนคอนโซล
- เลือกโครงการที่คุณเพิ่งสร้าง
- จากเมนูการนำทาง เลือก API และบริการ จากนั้นแดชบอร์ด
- คลิกปุ่มเปิดใช้งาน API และบริการ (ดูรายละเอียด)
- ค้นหาและเปิดใช้งาน Google ชีต API
- กำหนดค่าหน้าจอยินยอม 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 ชีตโดยใช้ข้อมูลรับรอง (ไฟล์ JSON) และกำหนดขอบเขตของแอปพลิเคชัน ขอบเขตกำหนดสิทธิ์การเข้าถึงแผ่นงานและคุณสมบัติของแผ่นงาน ฟังก์ชันต่อไปนี้เริ่มต้นบริการ 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 ชีต ตั้งชื่อชีตเริ่มต้น และส่งกลับวัตถุสเปรดชีต
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 ชีต
// สร้าง 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 ชีต 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 ฟรี
คุณสามารถรับ [ใบอนุญาตชั่วคราว] ฟรี 11 และใช้ Aspose.Cells for .NET โดยไม่มีข้อจำกัดในการประเมิน
บทสรุป
ในบทความนี้ คุณได้เรียนรู้วิธีแปลงไฟล์ Excel XLS หรือ XLSX เป็น Google ชีตใน C# เราได้กล่าวถึงวิธีสร้างโครงการบน Google Cloud, เปิดใช้งาน Google ชีต API, อ่านไฟล์ Excel และส่งออกข้อมูลจากไฟล์ Excel ไปยัง Google ชีต นอกจากนี้ คุณสามารถสำรวจคุณลักษณะอื่นๆ ของ Aspose.Cells for .NET โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถถามคำถามผ่าน ฟอรัม ของเรา