บทความนี้ครอบคลุมวิธีการแปลง MS Excel XLS หรือ XLSX เป็น Google ชีตโดยทางโปรแกรมใน C# .NET

แปลง 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

  1. ไปที่คอนโซล Google Cloud
  2. สร้างโครงการใหม่ บนคอนโซล
    • เลือกโครงการที่คุณเพิ่งสร้าง
  3. จากเมนูการนำทาง เลือก API และบริการ จากนั้นแดชบอร์ด
    • คลิกปุ่มเปิดใช้งาน API และบริการ (ดูรายละเอียด)
    • ค้นหาและเปิดใช้งาน Google ชีต API
  4. กำหนดค่าหน้าจอยินยอม OAuth และกำหนดขอบเขตของแอปพลิเคชัน
    • เพิ่มผู้ใช้ทดสอบซึ่งใช้เมื่อไม่ได้เผยแพร่แอปพลิเคชัน
  5. ในหน้า API และบริการ ให้ไปที่ข้อมูลรับรอง
    • คลิกปุ่มสร้างข้อมูลรับรอง และเลือกรหัสไคลเอ็นต์ OAuth
    • ในประเภทแอปพลิเคชัน เลือกแอปเดสก์ท็อป (เนื่องจากเรากำลังสร้างแอปพลิเคชันคอนโซลในบทความนี้)
    • ดาวน์โหลดไฟล์ JSON

C# .NET API สำหรับการแปลง Excel เป็น Google ชีต

ในการส่งออกข้อมูลจากไฟล์ Excel XLS/XLSX ไปยัง Google ชีต เราจำเป็นต้องมี API ต่อไปนี้

ในขณะที่เขียนบทความนี้ เราใช้ Aspose.Cells for .NET 22.2 และ Google.Apis.Sheets.v4 1.56.0.2608

ส่งออกข้อมูลจาก Excel XLSX ไปยัง Google ชีตใน C#

ต่อไปนี้เป็นคำแนะนำทีละขั้นตอนเกี่ยวกับวิธีอ่านข้อมูลจากไฟล์ Excel XLSX และเขียนลงใน Google ชีตในแอปพลิเคชันคอนโซล C#

  1. สร้างโครงการแอปพลิเคชันคอนโซลใหม่ใน Visual Studio 2013 หรือใหม่กว่า
ส่งออกข้อมูลจาก Excel XLSX ไปยัง Google ชีตใน C#
  1. ติดตั้ง Aspose.Cells for .NET และ Google Sheets API ในโครงการ
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. คัดลอกไฟล์ JSON (เราดาวน์โหลดหลังจากสร้างข้อมูลรับรองใน Google Cloud) แล้ววางลงในไดเร็กทอรีของโปรเจ็กต์

  2. เริ่มต้นบริการ 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;
}
  1. สร้างฟังก์ชัน 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;
}
  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 ซึ่งจะอ่านและส่งออกข้อมูลจากไฟล์ Excel ไปยัง Google ชีต ในฟังก์ชันนี้ ก่อนอื่น ให้โหลดไฟล์ Excel XLS/XLSX โดยใช้ Aspose.Cells for .NET และรับชื่อเวิร์กชีตแรกในเวิร์กบุ๊ก
// โหลดสมุดงาน Excel
Workbook wb = new Workbook(_excelFileName);

// รับชื่อแผ่นงานแรก
string defaultWorksheetName = wb.Worksheets[0].Name;
  1. จากนั้น เรียกใช้ฟังก์ชัน CreateSpreadsheet เพื่อสร้างสเปรดชีตใหม่บน Google ชีต
// สร้าง Google สเปรดชีตใหม่ด้วยแผ่นงานเริ่มต้น
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);
  1. วนซ้ำแผ่นงานในไฟล์ 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);
    }
}
  1. สำหรับแต่ละแผ่นงานในไฟล์ 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 โดยใช้ เอกสารประกอบ นอกจากนี้ คุณสามารถถามคำถามผ่าน ฟอรัม ของเรา

ดูสิ่งนี้ด้วย