این مقاله نحوه تبدیل MS Excel XLS یا XLSX به Google Sheets را به صورت برنامه‌نویسی در C#.NET شرح می‌دهد.

تبدیل Excel XLS یا XLSX به Google Sheets در C#.NET

صفحات گسترده معمولاً برای ذخیره داده های کوچک یا بزرگ در قالب ردیف و ستون استفاده می شود. برنامه های کاربردی مختلفی برای ایجاد و دستکاری صفحات گسترده موجود است که MS Excel یکی از محبوب ترین آنهاست. در کنار آن، Google Google Sheets را ارائه می دهد که برای ایجاد و به روز رسانی صفحات گسترده به صورت آنلاین استفاده می شود. علاوه بر این، Google Sheets به شما امکان می دهد صفحات گسترده را با چندین نفر در زمان واقعی به اشتراک بگذارید. در موارد خاص، ممکن است لازم باشد داده‌ها را از فایل‌های Excel XLS یا XLSX به صفحه‌گسترده در Google Sheets به صورت برنامه‌ریزی صادر کنید. پس بیایید ببینیم چگونه می‌توانید داده‌ها را از یک فایل اکسل بخوانید و آن‌ها را در صفحه گسترده Google Sheets در C#.NET بنویسید.

پیش نیازها - تبدیل فایل اکسل به Google Sheets در سی شارپ

پروژه Google Cloud

برای برقراری ارتباط با Google Sheets، باید یک پروژه در Google Cloud ایجاد کنیم و Google Sheets API را فعال کنیم. در زیر مراحل ایجاد یک پروژه و فعال کردن API آورده شده است.

  1. به کنسول Google Cloud بروید.
  2. یک پروژه جدید در کنسول ایجاد کنید.
    • پروژه ای را که به تازگی ایجاد کرده اید انتخاب کنید.
  3. از منوی پیمایش، APIs and Services و سپس Dashboard را انتخاب کنید.
  4. پیکربندی صفحه رضایت OAuth و محدوده برنامه را تنظیم کنید.
    • کاربران آزمایشی را اضافه کنید، که وقتی برنامه منتشر نمی شود استفاده می شود.
  5. در صفحه APIs and Services، به اعتبارنامه ها بروید.
    • روی دکمه ایجاد اعتبارنامه کلیک کنید و شناسه مشتری OAuth را انتخاب کنید.
    • در نوع برنامه، Desktop App را انتخاب کنید (زیرا در حال ایجاد یک برنامه کنسول در این مقاله هستیم).
    • فایل JSON را دانلود کنید.

C# .NET APIs برای تبدیل Excel به Google Sheets

برای صادر کردن داده‌ها از فایل‌های Excel XLS/XLSX به Google Sheets، به APIهای زیر نیاز داریم.

در زمان نوشتن این مقاله، از Aspose.Cells برای .NET 22.2 و Google.Apis.Sheets.v4 1.56.0.2608 استفاده کردیم.

صادرات داده ها از Excel XLSX به Google Sheets در C#

در زیر راهنمای گام به گام نحوه خواندن داده ها از یک فایل اکسل XLSX و نوشتن آن در Google Sheets در یک برنامه کنسول C# است.

  1. یک پروژه برنامه کاربردی کنسول جدید در ویژوال استودیو 2013 یا جدیدتر ایجاد کنید.
صادرات داده ها از Excel XLSX به Google Sheets در سی شارپ
  1. Aspose.Cells را برای API های دات نت و برگه های گوگل در پروژه نصب کنید.
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. فایل JSON را کپی کنید (ما پس از ایجاد اعتبارنامه در Google Cloud دانلود کرده ایم) و آن را در فهرست پروژه قرار دهید.

  2. سرویس 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);
    }

    // سرویس Google Sheets API را ایجاد کنید
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. ایجاد تابع 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;
}
  1. یک تابع 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();

}
  1. اکنون یک تابع جدید ExportDataFromExcelToGoogleSheet ایجاد کنید که داده ها را از یک فایل اکسل به Google Sheets می خواند و صادر می کند. در این تابع، ابتدا فایل اکسل XLS/XLSX را با استفاده از Aspose.Cells برای دات نت بارگذاری کنید و نام اولین کاربرگ را در کتاب کار دریافت کنید.
// یک کتاب کار اکسل را بارگیری کنید
Workbook wb = new Workbook(_excelFileName);

// نام اولین کاربرگ را دریافت کنید
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. سپس، تابع CreateSpreadsheet را برای ایجاد یک صفحه گسترده جدید در Google Sheets فراخوانی کنید.
// یک صفحه گسترده گوگل جدید با کاربرگ پیش فرض ایجاد کنید
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. کاربرگ های موجود در فایل اکسل را حلقه بزنید. در هر تکرار، داده ها را از کاربرگ بخوانید و به لیست اضافه کنید.
// از میان کاربرگ ها حلقه بزنید
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);
    }
}
  1. برای هر کاربرگ در فایل اکسل، درخواستی برای نوشتن داده در صفحه گسترده در 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);

عملکرد کامل برای صادر کردن داده ها از یک فایل اکسل به یک صفحه گسترده در 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)
{
    // یک کتاب کار اکسل را بارگیری کنید
    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);
    }
}

کد منبع کامل

در زیر کد منبع کامل برای تبدیل یک فایل اکسل XLSX به Google Sheets در سی شارپ آمده است.

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();

            // داده ها را از فایل اکسل به 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);
            }

            // سرویس Google Sheets API را ایجاد کنید
            var service = new SheetsService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

            return service;
        }
        public static void ExportDataFromExcelToGoogleSheet(SheetsService _sheetService, string _excelFileName)
        {
            // یک کتاب کار اکسل را بارگیری کنید
            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 در سی شارپ

مجوز Aspose.Cells رایگان دریافت کنید

می توانید یک [مجوز موقت] رایگان دریافت کنید و از Aspose.Cells برای دات نت بدون محدودیت ارزیابی استفاده کنید.

نتیجه

در این مقاله با نحوه تبدیل فایل های اکسل XLS یا XLSX به Google Sheets در سی شارپ آشنا شدید. ما نحوه ایجاد یک پروژه در Google Cloud، فعال کردن Google Sheets API، خواندن فایل‌های Excel و صادرات داده‌ها از فایل‌های Excel به Google Sheets را پوشش داده‌ایم. علاوه بر این، می توانید سایر ویژگی های Aspose.Cells را برای دات نت با استفاده از مستندات کاوش کنید. همچنین، می‌توانید سؤالات خود را از طریق [تالار گفتمان13 ما بپرسید.

همچنین ببینید