この記事では、C#.NETでプログラムでMSExcelXLSまたはXLSXをGoogleスプレッドシートに変換する方法について説明します。

Excel XLSまたはXLSXをC#.NETでGoogleスプレッドシートに変換する

スプレッドシートは通常、行や列の形式で小規模または大規模なデータを保存するために使用されます。スプレッドシートを作成および操作するためのさまざまなアプリケーションが利用可能ですが、その中でMSExcelが人気があります。また、GoogleはGoogle Sheetsを提供しています。これは、オンラインでスプレッドシートを作成および更新するために使用されます。さらに、Googleスプレッドシートを使用すると、スプレッドシートを複数の人とリアルタイムで共有できます。場合によっては、ExcelXLSまたはXLSXファイルからプログラムでGoogleスプレッドシートのスプレッドシートにデータをエクスポートする必要があります。それでは、Excelファイルからデータを読み取り、それをC#.NETのGoogleスプレッドシートのスプレッドシートに書き込む方法を見てみましょう。

前提条件-C#でExcelファイルをGoogleスプレッドシートに変換する

Google Cloud Project

Googleスプレッドシートと通信するには、Google Cloudでプロジェクトを作成し、GoogleスプレッドシートAPIを有効にする必要があります。プロジェクトを作成してAPIを有効にする手順は次のとおりです。

  1. GoogleCloudコンソールに移動します。
  2. コンソールで新しいプロジェクトを作成
    • 作成したプロジェクトを選択します。
  3. ナビゲーションメニューから、[APIとサービス]、[ダッシュボード]の順に選択します。
    • [APIとサービスを有効にする]ボタンをクリックします(詳細を参照)。
    • GoogleSheetsAPIを検索して有効にします。
  4. OAuth同意画面の設定とアプリケーションのスコープを設定します。
    • アプリケーションが公開されていないときに使用されるテストユーザーを追加します。
  5. APIとサービスページで、[資格情報]に移動します。
    • [資格情報の作成]ボタンをクリックして、[OAuthクライアントID]を選択します。
    • アプリケーションタイプで、[デスクトップアプリ]を選択します(この領域でコンソールアプリケーションを作成しているため)。
    • JSONファイルをダウンロードします。

ExcelからGoogleスプレッドシートへの変換用のC#.NET API

Excel XLS / XLSXファイルからGoogleスプレッドシートにデータをエクスポートするには、次のAPIが必要です。

この記事の執筆時点では、Aspose.Cells for .NET22.2およびGoogle.Apis.Sheets.v41.56.0.2608を使用しました。

Excel XLSXからC#でGoogleスプレッドシートにデータをエクスポートする

以下は、Excel XLSXファイルからデータを読み取り、C#コンソールアプリケーションでGoogleスプレッドシートに書き込む方法のステップバイステップガイドです。

  1. VisualStudio2013以降で新しいコンソールアプリケーションプロジェクトを作成します。
Excel XLSXからC#でGoogleスプレッドシートにデータをエクスポートする

2.プロジェクトにAspose.Cells for .NETおよびGoogleSheetsAPIをインストールします。

PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
  1. JSONファイル(Google Cloudでクレデンシャルを作成した後にダウンロードしたもの)をコピーして、プロジェクトのディレクトリに貼り付けます。

4.クレデンシャル(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);
    }

    // GoogleSheetsAPIサービスを作成する
    var service = new SheetsService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = ApplicationName,
    });

    return service;
}
  1. Googleスプレッドシートに新しいスプレッドシートを作成し、デフォルトシートの名前を設定し、Spreadsheetオブジェクトを返すCreateSpreadsheet関数を作成します。
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();

}

7.次に、ExcelファイルからGoogleスプレッドシートにデータを読み取ってエクスポートする新しい関数ExportDataFromExcelToGoogleSheetを作成します。この関数では、最初に、Aspose.Cells for .NETを使用してExcelXLS/ XLSXファイルをロードし、ブックの最初のワークシートの名前を取得します。

// Excelブックをロードする
Workbook wb = new Workbook(_excelFileName);

// 最初のワークシートの名前を取得します
string defaultWorksheetName = wb.Worksheets[0].Name;

8.次に、CreateSpreadsheet関数を呼び出して、Googleスプレッドシートに新しいスプレッドシートを作成します。

// デフォルトのワークシートで新しいGoogleスプレッドシートを作成する
Spreadsheet spreadhsheet = CreateSpreadsheet(_sheetService, wb.FileName, defaultWorksheetName);

9.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ファイルをC#で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)
        {
            // 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);
            }

            // GoogleSheetsAPIサービスを作成する
            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を使用できます。

結論

この記事では、Excel XLSまたはXLSXファイルをC#でGoogleスプレッドシートに変換する方法を学習しました。 Google Cloudでプロジェクトを作成する方法、Google Sheets APIを有効にする方法、Excelファイルを読み取る方法、ExcelファイルからGoogleSheetsにデータをエクスポートする方法について説明しました。さらに、ドキュメントを使用して、Aspose.Cells for .NETの他の機能を調べることができます。また、フォーラムから質問することもできます。

関連項目