מאמר זה עוסק כיצד להמיר MS Excel XLS או XLSX ל-Google Sheets באופן תכנותי ב-C# .NET.
גיליונות אלקטרוניים משמשים בדרך כלל לאחסון נתונים בקנה מידה קטן או גדול בצורה של שורות ועמודות. יישומים שונים זמינים ליצירה ולטפל בגיליונות אלקטרוניים, מתוכם MS Excel פופולרי. לצד, גוגל מספקת את Google Sheets, המשמש ליצירה ועדכון של גיליונות אלקטרוניים באינטרנט. בנוסף, Google Sheets מאפשר לך לשתף את הגיליונות האלקטרוניים עם מספר אנשים בזמן אמת. במקרים מסוימים, ייתכן שיהיה עליך לייצא נתונים מקובצי Excel XLS או XLSX לגיליון אלקטרוני ב-Google Sheets באופן פרוגרמטי. אז בוא נראה איך אתה יכול לקרוא נתונים מקובץ אקסל ולכתוב אותם לגיליון האלקטרוני של Google Sheets ב-C# .NET.
דרישות מוקדמות - המרת קובץ Excel ל-Google Sheets ב-C#
Google Cloud Project
כדי לתקשר עם Google Sheets, נצטרך ליצור פרויקט ב-Google Cloud ולהפעיל את Google Sheets API. להלן השלבים ליצירת פרויקט והפעלת ה-API.
- עבור אל קונסולת Google Cloud.
- צור פרויקט חדש בקונסולה.
- בחר את הפרויקט שיצרת זה עתה.
- מתפריט הניווט, בחר ממשקי API ושירותים ולאחר מכן לוח מחוונים.
- לחץ על הלחצן Enable APIs and Services (ראה פרטים).
- חפש והפעל את Google Sheets API.
- הגדר מסך הסכמה של OAuth והגדר את היקפים של האפליקציה.
- הוסף משתמשי בדיקה, המשמשים כאשר האפליקציה אינה מתפרסמת.
- בדף APIs and Services, עבור אל אישורים.
- לחץ על לחצן צור אישורים ובחר מזהה לקוח OAuth.
- בסוג יישום, בחר אפליקציית שולחן עבודה (כפי שאנו יוצרים יישום מסוף במאמר זה).
- הורד את קובץ JSON.
ממשקי API של C# .NET עבור המרת Excel ל-Google Sheets
כדי לייצא נתונים מקובצי Excel XLS/XLSX ל-Google Sheets, נצטרך את ממשקי ה-API הבאים.
- Aspose.Cells עבור NET - To read the data from Excel files.
- Google.Apis.Sheets.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 Sheets ב-C#
להלן המדריך שלב אחר שלב כיצד לקרוא נתונים מקובץ XLSX של Excel ולכתוב אותם ל-Google Sheets ביישום מסוף C#.
- צור פרויקט יישום חדש למסוף ב-Visual Studio 2013 ואילך.
- התקן את Aspose.Cells עבור .NET ו-Google Sheets APIs בפרויקט.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
העתק את קובץ ה-JSON (הורדנו לאחר יצירת אישורים ב-Google Cloud) והדבק אותו בספרייה של הפרויקט.
אתחול שירות Google Sheets באמצעות האישורים (קובץ 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 Sheets
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 Sheets. בפונקציה זו, ראשית, טען את קובץ 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);
- עברו בלולאה בין גליונות העבודה בקובץ האקסל. בכל איטרציה, קרא נתונים מגיליון העבודה והוסף אותם לרשימה.
// עברו בלולאה בין דפי עבודה
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);
}
}
- עבור כל גליון עבודה בקובץ האקסל, צור בקשה לכתיבת נתונים לגיליון האלקטרוני ב-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 Sheets ניתנת להלן.
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 Sheets ב-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)
{
// התחבר לגוגל
SheetsService sheetService = ConnectToGoogle();
// ייצא נתונים מקובץ Excel ל-Google Sheets
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 Sheets
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 Sheets ב-C#
קבל רישיון Aspose.Cells בחינם
אתה יכול לקבל רישיון זמני בחינם ולהשתמש ב-Aspose.Cells עבור .NET ללא מגבלות הערכה.
סיכום
במאמר זה, למדת כיצד להמיר קבצי Excel XLS או XLSX ל-Google Sheets ב-C#. סקרנו כיצד ליצור פרויקט ב-Google Cloud, להפעיל את Google Sheets API, לקרוא קובצי Excel ולייצא נתונים מקובצי Excel ל-Google Sheets. חוץ מזה, אתה יכול לחקור תכונות אחרות של Aspose.Cells עבור .NET באמצעות תיעוד. כמו כן, אתה יכול לשאול את השאלות שלך דרך הפורום שלנו.