フッターコンテンツにスキップ
IRONXLの使用

C#でExcelファイルを読むためのベストな方法 | IronXLステップバイステップガイド

C# で Excel ファイルを読み取ることは、 .NET開発者にとってよくある課題です。 データ インポート パイプライン、レポート ツール、バッチ処理システムを構築する場合でも、スプレッドシート データを適切に解析することが重要です。 IronXLは、サーバー上で Microsoft Office や COM相互接続 を必要とせずに XLSX、XLS、および CSV ファイルを処理する.NETライブラリです。 このガイドでは、インストールから高度なクエリまでの完全なワークフローについて説明しているので、プロジェクトに適切なアプローチを選択できます。

今IronXLを始めましょう。
green arrow pointer

C# で Excel ファイルを読み取る最適な方法は何ですか?

最善のアプローチは、 IronXLなどの専用の Office 非依存ライブラリを使用することです。 Microsoft.Office.Interop.Excel などの従来の方法は、Excel がインストールされているマシンでは機能しますが、バックグラウンドで COM プロセスを起動するため、サーバーまたはコンテナー環境では脆弱になります。 OpenXML SDK は無料でサーバーセーフですが、日常的なタスクに大量の定型文を必要とする低レベルの XML モデルを公開します。

IronXL はこれらの両極端の中間に位置します。 この API は、開発者がスプレッドシートについて既に考えている方法を反映しています。つまり、ワークブックにはワークシートが含まれ、ワークシートにはセルが含まれ、セルには入力された値が保持されます。 ライブラリは形式の検出、数式の評価、エンコードを内部で処理するため、詳細を解析するのではなくビジネス ロジックに時間を費やすことができます。

C# での Excel 読み取りアプローチの比較
アプローチ Office が必要ですか? サーバーは安全ですか? APIの簡素化 フォーマットサポート
COM相互接続 はい なし 低い XLSX、XLS
OpenXML SDK なし はい 低い XLSXのみ
IronXL なし はい 高い XLSX、XLS、CSV

IronXL Excel 読み取りドキュメントでは、完全な API サーフェスがカバーされています。 現時点では、以下のセクションでは、すべてのプロジェクトで使用するコアパターンを示します。

.NETプロジェクトにIronXLをインストールするにはどうすればよいでしょうか?

NuGetパッケージ マネージャーを使用すると、インストールには 1 分もかかりません。 プロジェクト ディレクトリでターミナルを開き、次を実行します。

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

あるいは、Visual Studio パッケージ マネージャー コンソールを使用します。

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

インストール後、スプレッドシートへのアクセスが必要なファイルに using IronXL; ディレクティブを追加します。 このライブラリは.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2、 .NET Standard 2.0を対象としているため、ランタイムをアップグレードすることなく既存のプロジェクトに組み込むことができます。プラットフォーム固有の注意事項とNuGetパッケージの詳細については、 IronXLインストールガイドをご覧ください。

追加のランタイム コンポーネント、レジストリ エントリ、または Office ライセンスは必要ありません。 NuGetパッケージには、ライブラリに必要なものがすべてバンドルされています。

インストールの確認

パッケージを追加した後、プロジェクトを一度ビルドして、参照が正しく解決されることを確認します。 IronXL タイプに対して CS0246 エラーが表示される場合は、using IronXL; ディレクティブが存在し、.csproj のターゲット フレームワークがサポートされているバージョンの 1 つであることを確認してください。 IronXL互換性マトリックスには、確認済みのランタイム ターゲットがすべてリストされています。

Excel ブックを読み込んで読み取るにはどうすればよいでしょうか?

ワークブックを読み込むには、メソッドの呼び出しを 1 回だけ行う必要があります。 WorkBook.Load はファイル パスを受け入れ、メモリ内のファイル全体を表す WorkBook オブジェクトを返します。

using IronXL;

// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");

// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];

// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");

Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
using IronXL;

// Load any supported format -- XLSX、XLS, or CSV
WorkBook workbook = WorkBook.Load("financial_report.xlsx");

// Access the first worksheet by position
WorkSheet worksheet = workbook.WorkSheets[0];

// Or retrieve a named worksheet
WorkSheet expenses = workbook.GetWorkSheet("Expenses");

Console.WriteLine($"Sheets loaded: {workbook.WorkSheets.Count}");
Console.WriteLine($"Default sheet rows: {worksheet.RowCount}");
$vbLabelText   $csharpLabel

 IronXLを使用して C# で Excel ファイルを読み取る最適な方法: 画像 1 - 読み込まれたワークブックの確認用のコンソール出力

WorkBook オブジェクトは、すべてのワークシート データへのアクセスを可能にします。 各 WorkSheet インスタンスはファイル内のタブにマッピングされます。単一シートファイルの場合、インデックスによるアクセス(WorkSheets[0])は信頼性があります。 ファイルに既知の名前を持つ複数のタブが含まれている場合は、名前でアクセスする方が安全です。

IronXL は、セルを読み取るときに数式を自動的に評価します。 セル B10=SUM(B2:B9) が含まれている場合、sheet["B10"].DecimalValue を読み取ると、数式文字列ではなく計算された合計が返されます。 ワークブックの読み込みオプションの詳細については、スプレッドシートの読み込み方法ガイドを参照してください。

複数のワークシートの操作

ワークブックに複数のタブが含まれている場合は、workbook.WorkSheets を使用してタブを列挙し、順番に処理することができます。 これは、月、部門、または地域ごとにデータを別々のタブに分割するファイルに役立ちます。 WorkSheet.Name プロパティは、タブ ラベルを文字列として提供し、条件付き処理やログ記録に使用できます。

ワークシートからセルの値を読み取るにはどうすればよいでしょうか?

IronXL は各セルに厳密に型指定されたプロパティを提供するため、手動で解析することなく、正しい.NET型に直接値を読み込むことができます。

using IronXL;

WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity       = sheet["B2"].IntValue;
decimal price      = sheet["C2"].DecimalValue;
bool inStock       = sheet["D2"].BoolValue;

// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
    Console.WriteLine($"Status: {statusCell.StringValue}");
}

// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
using IronXL;

WorkBook workbook = WorkBook.Load("Products.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Address-based access with typed properties
string productName = sheet["A2"].StringValue;
int quantity       = sheet["B2"].IntValue;
decimal price      = sheet["C2"].DecimalValue;
bool inStock       = sheet["D2"].BoolValue;

// Check for empty cells before processing
var statusCell = sheet["E2"];
if (statusCell.Value != null && statusCell.StringValue.Length > 0)
{
    Console.WriteLine($"Status: {statusCell.StringValue}");
}

// Row/column index access (zero-based)
var firstDataCell = sheet.Rows[1].Columns[0];
Console.WriteLine($"Product: {productName}, Qty: {quantity}, Price: {price:C}");
$vbLabelText   $csharpLabel

 IronXLを使用して C# で Excel ファイルを読み取る最良の方法: 画像 2 - IronXLを使用したシンプルな Excel 読み取り出力

sheet["A2"] 構文では標準の Excel 表記が使用されます。 列の文字は大文字と小文字を区別せず、行番号は Excel のセルのラベル付け方法に合わせて 1 から始まります。 セル値の読み取りドキュメントには、日付として書式設定されたセルの DateTimeValue を含む追加の型付きアクセサーが表示されます。

セルにテキストとして保存された数値が含まれている場合 (エクスポートされたスプレッドシートでよくあるデータ品質の問題)、StringValue はテキストをそのまま返しますが、DecimalValue は解析を試行し、失敗した場合は 0 を返します。 予期しないデータを本番環境のコードで型指定された値として扱う前に、必ず検証してください。

日付とブールセルの扱い

Excel の日付セルは、内部的にはシリアル番号として保存されます。 IronXL は、手動の計算なしで.NET DateTime オブジェクトに変換するための DateTimeValue を公開します。 TRUE または FALSE を含むセルの場合、BoolValue は文字列比較なしで正しいブール値を返します。 これらの型付きアクセサーは、汎用テキストベースのパーサーを介してスプレッドシートを読み取るときによく発生するデータ型のバグのクラスを排除します。

行とセルを反復処理するにはどうすればよいでしょうか?

データセットを反復処理するには、範囲または行のコレクションが必要です。 IronXL は両方のアプローチをサポートしており、データの形状に合わせてそれらを組み合わせることができます。

using IronXL;

WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];

// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
    var row = sheet.Rows[rowIndex];
    var values = new System.Text.StringBuilder();

    foreach (var cell in row)
    {
        if (cell.Value != null)
            values.Append($"{cell.StringValue}\t");
    }

    Console.WriteLine(values.ToString().TrimEnd());
}
using IronXL;

WorkBook workbook = WorkBook.Load("financial_report.xlsx");
WorkSheet sheet = workbook.WorkSheets[0];

// Iterate a cell range -- skips header row
foreach (var cell in sheet["A2:D100"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Row-by-row with column access
for (int rowIndex = 1; rowIndex < sheet.RowCount; rowIndex++)
{
    var row = sheet.Rows[rowIndex];
    var values = new System.Text.StringBuilder();

    foreach (var cell in row)
    {
        if (cell.Value != null)
            values.Append($"{cell.StringValue}\t");
    }

    Console.WriteLine(values.ToString().TrimEnd());
}
$vbLabelText   $csharpLabel

 IronXLを使用して C# で Excel ファイルを読み取る最適な方法: 画像 3 - 行を反復処理するための出力

範囲文字列 "A2:D100" はフラットなセル コレクションを作成します。 範囲内の行は上から下、左から右に処理されます。 このパターンは、DataTable、またはデータベースへのエクスポートに適しています。

sheet.RowCount プロパティはワークシートで最後に使用された行を反映するため、データが終了するとループは自動的に終了します。 Excel 範囲の反復ガイドでは、列を先にトラバーサルするなどの追加の反復パターンについて説明します。

ヘッダー行のスキップ

ほとんどのスプレッドシートには、データではなく列名を説明するヘッダー行があります。 範囲の反復を行 2 から開始します (例: "A2:D100")。または、ヘッダーをスキップするには、インデックス ループを rowIndex = 1 から開始します。 ToDataTable(true) を使用すると、 IronXL はヘッダー検出を自動的に処理し、最初の行から列名をマップします。

複数の Excel 形式をどのように処理しますか?

IronXL は拡張子とファイル ヘッダーからファイル形式を自動的に検出します。 API は XLSX、XLS、CSV ファイルで同一であるため、条件付きロジックなしで同じ解析コードが 3 つの形式すべてで機能します。

using IronXL;

// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook  = WorkBook.Load("Legacy.xls");
WorkBook csvBook  = WorkBook.Load("Export.csv");

// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;

// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");

Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows:  {sheet2.RowCount}");
Console.WriteLine($"CSV rows:  {sheet3.RowCount}");
using IronXL;

// Load different formats with identical API
WorkBook xlsxBook = WorkBook.Load("Modern.xlsx");
WorkBook xlsBook  = WorkBook.Load("Legacy.xls");
WorkBook csvBook  = WorkBook.Load("Export.csv");

// Access worksheets identically across formats
WorkSheet sheet1 = xlsxBook.DefaultWorkSheet;
WorkSheet sheet2 = xlsBook.DefaultWorkSheet;
WorkSheet sheet3 = csvBook.DefaultWorkSheet;

// Cross-format conversion -- save XLSX as CSV, or CSV as XLSX
xlsxBook.SaveAs("converted_output.csv");
csvBook.SaveAs("structured_output.xlsx");

Console.WriteLine($"XLSX rows: {sheet1.RowCount}");
Console.WriteLine($"XLS rows:  {sheet2.RowCount}");
Console.WriteLine($"CSV rows:  {sheet3.RowCount}");
$vbLabelText   $csharpLabel

CSV ファイルの場合、 IronXL は、コンマを含む引用符付きフィールド、引用符付き値内の改行、エスケープされた二重引用符などの RFC 4180 規則を尊重します。 CSV から XLSX への変換ガイドでは、非標準の CSV エクスポートの区切り文字のカスタマイズについて説明します。

アプリケーションが外部システムからのファイルを受け入れる必要がある場合は、読み込む前にファイル拡張子を検査し、コンテンツを検証することをお勧めします。 ファイルが破損しているかサポートされていない形式である場合、 IronXL は説明的な例外をスローします。これをキャッチしてユーザーに表示することができます。

Excel データに対して高度なクエリを実行するにはどうすればよいですか?

IronXL は、セルごとの読み取りだけでなく、ワークシートの範囲をクエリ可能なコレクションに変換する集計関数と LINQ 互換性も提供します。

using IronXL;
using System.Linq;

WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin  = sheet["D2:D50"].Avg();

// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
    .Where(c => c.DecimalValue > 1000)
    .Select(c => new { c.AddressString, c.DecimalValue });

foreach (var row in highValueRows)
    Console.WriteLine($"高い value at {row.AddressString}: {row.DecimalValue:C}");

// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");

Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
using IronXL;
using System.Linq;

WorkBook workbook = WorkBook.Load("Financials.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Built-in aggregates -- no manual looping needed
decimal totalSales = sheet["B2:B50"].Sum();
decimal maxRevenue = sheet["C2:C50"].Max(c => c.DecimalValue);
decimal avgMargin  = sheet["D2:D50"].Avg();

// LINQ filtering directly on a range
var highValueRows = sheet["C2:C50"]
    .Where(c => c.DecimalValue > 1000)
    .Select(c => new { c.AddressString, c.DecimalValue });

foreach (var row in highValueRows)
    Console.WriteLine($"高い value at {row.AddressString}: {row.DecimalValue:C}");

// Write a calculated result back to the sheet
sheet["E2"].Value = totalSales;
workbook.SaveAs("Financials_Updated.xlsx");

Console.WriteLine($"Total: {totalSales:C}, Max: {maxRevenue:C}, Avg: {avgMargin:C}");
$vbLabelText   $csharpLabel

 IronXLを使用して C# で Excel ファイルを読み取る最良の方法: 画像 4 - 高度な操作コンソール出力の読み取り

LINQ 互換性は、行をデータベースにインポートする前にフィルター処理する必要がある場合や、列内のすべての値がしきい値を満たしていることを検証する必要がある場合に役立ちます。 ライブラリは LINQ が実行される前に数式を評価するため、集計クエリは常に数式の文字列ではなく最終的に計算された値に対して実行されます。

LINQ with IronXLチュートリアルでは、ワークシートの結合、列によるグループ化、厳密に型指定されたオブジェクトへの結果の投影など、データ パイプライン コードの多くの定型句を排除するパターンについて説明します。

Excel データを DataTable にエクスポートするにはどうすればよいですか?

多く for .NETアプリケーションは、スプレッドシート データを ADO.NET DataTable にロードして、さらに処理したり、データベースに挿入したりします。 IronXL は、手動での列マッピングを必要としない直接変換方法を提供します。

using IronXL;
using System.Data;

WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);

Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows:    {dataTable.Rows.Count}");

// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
using IronXL;
using System.Data;

WorkBook workbook = WorkBook.Load("SalesData.xlsx");
WorkSheet sheet = workbook.DefaultWorkSheet;

// Convert worksheet to DataTable -- first row becomes column headers
DataTable dataTable = sheet.ToDataTable(true);

Console.WriteLine($"Columns: {dataTable.Columns.Count}");
Console.WriteLine($"Rows:    {dataTable.Rows.Count}");

// Iterate the DataTable normally
foreach (DataRow row in dataTable.Rows)
{
    Console.WriteLine($"{row["ProductName"]} -- {row["Quantity"]} -- {row["Price"]}");
}
$vbLabelText   $csharpLabel

trueToDataTable に渡すと、最初のワークシート行が列ヘッダーとして扱われます。 結果として得られる DataTable は、ヘッダー テキストに一致する文字列の列名を使用するため、後続の LINQ-to-DataSet クエリが読みやすくなります。 DataTable エクスポートのドキュメントでは、null 処理と型推論のオプションについて説明します。

このパターンは、下流のコードが既に DataTable を期待している場合 (たとえば、SQL Server に行を挿入するために SqlBulkCopy を呼び出す場合) に特に役立ちます。 XLSX ファイルをロードし、DataTable に変換して、列マッピングの定型文を記述せずに一括挿入することができます。

IronXL Core 読み取り API リファレンス
手術 API 返品
ファイルを読み込む `WorkBook.Load(path)` `WorkBook`
インデックスでワークシートを取得する `workbook.WorkSheets[0]` `WorkSheet`
名前でワークシートを取得する `workbook.GetWorkSheet("name")` `WorkSheet`
文字列セルの読み取り `sheet["A1"].StringValue` `文字列`
小数セルの読み取り `sheet["B1"].DecimalValue` `decimal`
範囲を反復する `foreach cell in sheet["A2:D100"]` `IEnumerable`
範囲を合計する `sheet["B2:B50"].Sum()` `decimal`
DataTable へのエクスポート `sheet.ToDataTable(true)` `DataTable`

完全な API リストについては、 IronXL API リファレンスを参照してください。 このリファレンスでは、すべてのプロパティとメソッドについて、パラメータの説明と戻り値の型の詳細とともに説明します。

次のステップは何ですか?

適切なライブラリがあれば、C# で Excel ファイルを読み取るのは簡単です。 IronXL はOffice への依存関係を排除し、API サーフェスを簡素化し、同じコード パスで XLSX、XLS、CSV 形式を処理します。 ここで説明するパターン (ワークブックの読み込み、型指定されたセル値の読み取り、範囲の反復、集計の実行、および DataTable へのエクスポート) は、実際のスプレッドシート読み取り要件の大部分をカバーします。

これらのパターンをさらに構築するには:

  • プロジェクトのセットアップ ガイダンスとランタイム要件については、 IronXL入門ドキュメントをお読みください。
  • 書き込み、書式設定、グラフ生成に関するハウツー ガイドをご覧ください。
  • Excel 数式サポート ガイドを確認して、 IronXL が自動的に評価する Excel 関数を理解します。
  • 実稼働展開オプションについては、 IronXLライセンス ページを確認してください。
  • データ検証、ピボット テーブルのエクスポート、パスワードで保護されたファイルの処理に関する実例については、 IronXLブログを参照してください。

IronXL を他のライブラリと比較して評価するチーム向けに、 IronXLと EPPlus の比較IronXLと NPOI の比較では、パフォーマンス ベンチマークと API の違いについて説明します。 両方の比較には、各ライブラリの同等の操作のコード サンプルが含まれています。

レガシー システムの通常とは異なるスプレッドシート構造に遭遇した場合、Microsoft 独自のExcel ファイル形式仕様が便利なリファレンスになります。 ECMA-376 標準は、 XLSX ファイルが従う OOXML 形式を定義します。

実稼働ライセンスを購入する前に、無料のIronXL試用ライセンスを使用して、独自のプロジェクトで完全な API をテストしてください。

よくある質問

C#でExcelファイルを読む最良の方法は何ですか?

C#でExcelファイルを読み取る最良の方法は、 IronXLなどのOfficeに依存しない専用ライブラリを使用することです。IronXLはMicrosoft ExcelやCOM Interopを必要とせずにXLSX、XLS、CSV形式を処理できるため、サーバー環境やコンテナ環境でも安全に使用できます。

IronXLを使用するには Microsoft Office をインストールする必要がありますか?

いいえIronXLはNuGetパッケージとして配布されるスタンドアロン for .NETライブラリです。マシン上にMicrosoft Office、Excel、その他のCOMコンポーネントは必要ありません。

IronXL はどのような Excel ファイル形式をサポートしていますか?

IronXLはXLSX、XLS、CSVファイルの読み書きに対応しています。ファイル拡張子とコンテンツヘッダーに基づいて、自動的にフォーマットが検出されます。

.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?

ターミナルで「dotnet add package IronXl.Excel」を実行するか、Visual Studio パッケージ マネージャー コンソールで「Install-Package IronXl.Excel」を実行します。

IronXL はExcel データを DataTable にエクスポートできますか?

はい。WorkSheet.ToDataTable(true) メソッドは、任意のワークシートを ADO .NET DataTable に変換します。true が渡されると、最初の行が列ヘッダーとして使用されます。

IronXL はExcel データに対する LINQ クエリをサポートしていますか?

はい。IronXLIronXL範囲は IEnumerable を実装しているため、Where、Select、Sum、Max、Avg などの LINQ メソッドをワークシート範囲で直接使用できます。

IronXLはExcelの数式をどのように処理しますか?

IronXLは、セルの値を読み取る際に数式を自動的に評価します。数式セルで sheet["B10"].DecimalValue を読み取ると、数式文字列ではなく計算結果が返されます。

IronXL はど for .NETバージョンをサポートしていますか?

IronXL は、.NET 10、 .NET 8、 .NET 6、 .NET Framework 4.6.2、および.NET Standard 2.0 をサポートしています。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me