本文介紹如何在 C# .NET 中以編程方式將 MS Excel XLS 或 XLSX 轉換為 Google 表格。

在 C# .NET 中將 Excel XLS 或 XLSX 轉換為 Google 表格

電子表格通常用於以行和列的形式存儲小型或大型數據。可以使用各種應用程序來創建和操作電子表格,其中 MS Excel 是一種流行的應用程序。此外,Google 還提供 Google Sheets,用於在線創建和更新電子表格。此外,Google 表格可讓您與多人實時共享電子表格。在某些情況下,您可能需要以編程方式將數據從 Excel XLS 或 XLSX 文件導出到 Google 表格中的電子表格。因此,讓我們看看如何從 Excel 文件中讀取數據並將其寫入 C# .NET 中的 Google 表格電子表格。

先決條件 - 在 C# 中將 Excel 文件轉換為 Google 表格

谷歌云項目

要與 Google Sheets 通信,我們必須在 Google Cloud 上創建一個項目並啟用 Google Sheets API。以下是創建項目和啟用 API 的步驟。

  1. 轉到 Google Cloud 控制台。
  2. 創建一個新項目 在控制台上。
    • 選擇剛剛創建的項目。
  3. 從導航菜單中,選擇 API 和服務,然後選擇儀表板。
    • 單擊啟用 API 和服務按鈕(查看詳細信息)。
    • 搜索並啟用 Google Sheets API。
  4. 配置 OAuth 同意屏幕 並設置應用程序的範圍。
    • 添加測試用戶,在應用程序未發佈時使用。
  5. APIs and Services 頁面上,轉到 Credentials。
    • 單擊創建憑據按鈕並選擇 OAuth 客戶端 ID。
    • 在應用程序類型中,選擇桌面應用程序(因為我們在本文中創建了一個控制台應用程序)。
    • 下載 JSON 文件。

用於 Excel 到 Google 表格轉換的 C# .NET API

要將數據從 Excel XLS/XLSX 文件導出到 Google 表格,我們需要以下 API。

在撰寫本文時,我們使用 Aspose.Cells for .NET 22.2 和 Google.Apis.Sheets.v4 1.56.0.2608。

在 C# 中將數據從 Excel XLSX 導出到 Google 表格

以下是有關如何在 C# 控制台應用程序中從 Excel XLSX 文件讀取數據並將其寫入 Google 表格的分步指南。

  1. 在 Visual Studio 2013 或更高版本中新建一個控制台應用程序項目。
在 C# 中將數據從 Excel XLSX 導出到 Google 表格
  1. 在項目中安裝Aspose.Cells for .NET 和Google Sheets APIs。
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. 複製 JSON 文件(我們在 Google Cloud 中創建憑證後下載)並將其粘貼到項目目錄中。

  2. 使用憑據(JSON 文件)初始化 Google 表格服務並定義應用程序的範圍。範圍定義了對工作表及其屬性的訪問權限。以下函數初始化 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 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,它從 Excel 文件讀取數據並將其導出到 Google 表格。在此函數中,首先,使用 Aspose.Cells for .NET 加載 Excel XLS/XLSX 文件,並獲取工作簿中第一個工作表的名稱。
// 加載 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);
    }
}

完整的源代碼

以下是在 C# 中將 Excel XLSX 文件轉換為 Google 表格的完整源代碼。

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 表格
            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();
        }
    }
}

演示 - 在 C# 中將 Excel 轉換為 Google 表格

獲得免費的 Aspose.Cells 許可證

您可以獲得免費的臨時許可,並在沒有評估限制的情況下使用 Aspose.Cells for .NET。

結論

在本文中,您學習瞭如何使用 C# 將 Excel XLS 或 XLSX 文件轉換為 Google 表格。我們介紹瞭如何在 Google Cloud 上創建項目、啟用 Google Sheets API、讀取 Excel 文件以及將數據從 Excel 文件導出到 Google Sheets。此外,您可以使用 文檔 探索 Aspose.Cells for .NET 的其他功能。此外,您可以通過我們的 論壇 提問。

也可以看看