本文介绍如何在 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 Sheets 电子表格。

先决条件 - 在 C# 中将 Excel 文件转换为 Google 表格

谷歌云项目

要与 Google Sheets 通信,我们必须在 Google Cloud 上创建一个项目并启用 Google Sheets API。以下是创建项目和启用 API 的步骤。

  1. 转到 Google Cloud 控制台。
  2. 创建一个新项目 在控制台上。
    • 选择您刚刚创建的项目。
  3. 从导航菜单中,选择 API 和服务,然后选择仪表板。
    • 单击启用 API 和服务按钮(查看详细信息)。
    • 搜索并启用 Google Sheets API。
  4. 配置 OAuth 同意屏幕 并设置应用程序的范围。
    • 添加测试用户,在应用未发布时使用。
  5. API 和服务 页面上,转到凭据。
    • 单击创建凭据按钮并选择 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 API。
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. 复制 JSON 文件(我们是在 Google Cloud 中创建凭据后下载的)并将其粘贴到项目目录中。

  2. 使用凭据(JSON 文件)初始化 Google 表格服务并定义应用程序的范围。范围定义了对工作表及其属性的访问权限。以下函数初始化 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 表格 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 的其他功能。此外,您可以通过我们的 论坛 提问。

也可以看看