この記事では、C#.NETでプログラムでMSExcelXLSまたはXLSXを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を有効にする手順は次のとおりです。
- GoogleCloudコンソールに移動します。
- コンソールで新しいプロジェクトを作成。
- 作成したプロジェクトを選択します。
- ナビゲーションメニューから、[APIとサービス]、[ダッシュボード]の順に選択します。
- [APIとサービスを有効にする]ボタンをクリックします(詳細を参照)。
- GoogleSheetsAPIを検索して有効にします。
- OAuth同意画面の設定とアプリケーションのスコープを設定します。
- アプリケーションが公開されていないときに使用されるテストユーザーを追加します。
- APIとサービスページで、[資格情報]に移動します。
- [資格情報の作成]ボタンをクリックして、[OAuthクライアントID]を選択します。
- アプリケーションタイプで、[デスクトップアプリ]を選択します(この領域でコンソールアプリケーションを作成しているため)。
- JSONファイルをダウンロードします。
ExcelからGoogleスプレッドシートへの変換用のC#.NET API
Excel XLS / XLSXファイルからGoogleスプレッドシートにデータをエクスポートするには、次のAPIが必要です。
- Aspose.Cells for .NET - To read the data from Excel files.
- Google.Apis.Sheets.v4 - To create and update spreadsheets on Google Sheets.
この記事の執筆時点では、Aspose.Cells for .NET22.2およびGoogle.Apis.Sheets.v41.56.0.2608を使用しました。
Excel XLSXからC#でGoogleスプレッドシートにデータをエクスポートする
以下は、Excel XLSXファイルからデータを読み取り、C#コンソールアプリケーションでGoogleスプレッドシートに書き込む方法のステップバイステップガイドです。
- VisualStudio2013以降で新しいコンソールアプリケーションプロジェクトを作成します。
2.プロジェクトにAspose.Cells for .NETおよびGoogleSheetsAPIをインストールします。
PM> Install-Package Aspose.Cells
PM> Install-Package Google.Apis.Sheets.v4
- 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;
}
- 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;
}
- 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);
}
}
- 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の他の機能を調べることができます。また、フォーラムから質問することもできます。