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

Interop とIronXLを使用して C# で DataTable を Excel にエクスポートする方法

.NET開発者にとって、DataTable を Excel にエクスポートすることが重要なのはなぜですか?

データベースまたはアプリケーションから Excel ファイルにデータをエクスポートすることは、情報を効率的に分析、視覚化、共有する必要がある組織にとって基本的な要件です。 Excel ファイルは、ユーザーフレンドリーなインターフェースを備えているため、エンドユーザーがデータを操作したり解釈したりすることが簡単にできることで広く知られています。 開発者は、データセットを .xlsx 形式に変換することで、受信者の技術的背景に関係なく、データがアクセス可能で適切に構造化された状態を維持することを保証します。

.NET開発者にとって、Microsoft Office Interop とIronXLなどの専用の Excel ライブラリという 2 つの一般的なアプローチがあります。 このガイドでは、実用的な C# コード例を使用して両方の方法を詳しく説明し、トレードオフを比較し、それぞれのアプローチが本番アプリケーションに適している場合について説明します。

Interop とIronXLの主な違いは何ですか?

コードに取り組む前に、これら 2 つのアプローチの基本的な違いを理解しておくと、あらゆるプロジェクトで適切な選択を行うのに役立ちます。 比較には、DataTable から Excel へのエクスポート シナリオを扱う際の技術アーキテクチャ、展開要件、および実際の開発経験が含まれます。

C# での Excel エクスポートにおける Microsoft Office Interop とIronXLの比較
特徴 Microsoft Office Interop IronXL
Officeのインストールが必要 はい - Microsoft Excel がインストールされている必要があります いいえ - スタンドアロンライブラリ
サーバーサイドサポート Microsoft では推奨されていません 完全にサポートされています
プラットフォームサポート Windowsのみ Windows、Linux、macOS、Azure
.NET Core / .NET 5+ サポート 制限あり 完全サポート(.NET 6、7、8、9、10)
リソース管理 COMオブジェクトのクリーンアップが必要 標準的な.NETの廃棄
インストール方法 COM 参照 + Office インストール NuGet パッケージ
スレッドモデル シングルスレッドアパートメント(STA) スレッドセーフな操作
大規模データセット メモリを大量に消費するプロセス 効率的なファイルベースのアプローチ
サポートされているファイル形式 XLSX、XLS、CSV XLSX、XLS、CSV、JSON、XML
ライセンス Officeライセンスが必要です 商用ライセンス利用可能

アーキテクチャ上の違いは根本的です。Excel Interop は COM を通じて Microsoft Excel アプリケーション自体を自動化しますが、 IronXL は外部プロセスを起動せずに Excel ファイル形式を直接読み書きします。 この区別は、メモリ使用量から展開の複雑さまで、あらゆることに影響します。

Excel エクスポート用にIronXLをインストールするにはどうすればいいですか?

IronXLのインストールにはNuGet経由で数秒しかかかりません。 追加のソフトウェア、Office のインストール、システム構成は必要ありません。 ライブラリは、Azure App Services、Azure Functions、コンテナー インスタンスなど、Windows、Linux、macOS にインストールするとすぐに実行されます。

NuGetパッケージ マネージャー コンソールを開き、次を実行します。

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

IronXL は、 .NET Framework 4.6.2以降と、 .NET 10 までのすべての最新 for .NETバージョンをサポートしています。インストールしたら、ファイルの先頭に using IronXL; を追加すると、エクスポートの準備が整います。

Interop を使用して C# で DataTable を Excel にエクスポートするにはどうすればよいですか?

従来のアプローチでは、Microsoft.Office.Interop.Excel 名前空間を使用して Excel を直接自動化します。 この方法では、コードが実行されるマシンに Microsoft Excel がインストールされている必要があります。

相互運用性の前提条件

Interop を使用する前に、次の点を確認してください。

  1. 開発マシンと展開マシンに Microsoft Excel がインストールされています。
  2. Visual Studio に"Microsoft Excel オブジェクト ライブラリ"への COM 参照が追加されます。
  3. Microsoft.Office.Interop.Excel 名前空間がプロジェクトに含まれます。

相互運用エクスポートコード

次のコードは、トップレベルのステートメントを使用して C# で Microsoft Office Interop を使用して DataTable を Excel ファイルにエクスポートする方法を示しています。

using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Runtime.InteropServices;

// Create a sample DataTable with employee data
DataTable dt = new DataTable("Employees");
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));

dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
dt.Rows.Add(4, "Emily Davis", "Engineering", 80000);

// Initialize Excel Application object
Application excelApp = new Application
{
    Visible = false,
    DisplayAlerts = false
};

Workbook workbook = excelApp.Workbooks.Add();
Worksheet worksheet = (Worksheet)workbook.ActiveSheet;

try
{
    // Write column headers to the first row
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
    }

    // Write data rows starting from row 2
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
        }
    }

    string filePath = @"C:\Reports\EmployeeReport_Interop.xlsx";
    workbook.SaveAs(filePath);
    Console.WriteLine("Excel file created using Interop.");
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
finally
{
    // Always release COM objects to prevent orphaned Excel processes
    workbook.Close();
    excelApp.Quit();
    Marshal.ReleaseComObject(worksheet);
    Marshal.ReleaseComObject(workbook);
    Marshal.ReleaseComObject(excelApp);
}
using Microsoft.Office.Interop.Excel;
using System.Data;
using System.Runtime.InteropServices;

// Create a sample DataTable with employee data
DataTable dt = new DataTable("Employees");
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));

dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
dt.Rows.Add(4, "Emily Davis", "Engineering", 80000);

// Initialize Excel Application object
Application excelApp = new Application
{
    Visible = false,
    DisplayAlerts = false
};

Workbook workbook = excelApp.Workbooks.Add();
Worksheet worksheet = (Worksheet)workbook.ActiveSheet;

try
{
    // Write column headers to the first row
    for (int i = 0; i < dt.Columns.Count; i++)
    {
        worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
    }

    // Write data rows starting from row 2
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        for (int j = 0; j < dt.Columns.Count; j++)
        {
            worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
        }
    }

    string filePath = @"C:\Reports\EmployeeReport_Interop.xlsx";
    workbook.SaveAs(filePath);
    Console.WriteLine("Excel file created using Interop.");
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex.Message);
}
finally
{
    // Always release COM objects to prevent orphaned Excel processes
    workbook.Close();
    excelApp.Quit();
    Marshal.ReleaseComObject(worksheet);
    Marshal.ReleaseComObject(workbook);
    Marshal.ReleaseComObject(excelApp);
}
$vbLabelText   $csharpLabel

Application オブジェクトは Excel プロセス自体を表します。 Visible = false を設定すると、バックグラウンド操作に不可欠な処理中に Excel が画面上で開かなくなります。 DisplayAlerts = false 設定により、自動化されたワークフローを中断する可能性のあるダイアログ ボックスが抑制されます。

finally ブロックはオプションではありません。Marshal.ReleaseComObject を使用して各 COM オブジェクトを明示的に解放する必要があります。 この手順を省略すると、タスク マネージャーに孤立した Excel プロセスが残り、メモリが消費され、最終的にサーバーが不安定になります。 このクリーンアップ パターンは、Interop が Web アプリケーションやサービスに適さない原因となる、よく知られた問題点です。

IronXLを使用して DataTable を Excel にエクスポートするにはどうすればよいですか?

IronXL は、Office をインストールしなくても動作する最新の代替手段を提供します。 このライブラリは Excel ファイルを直接読み書きするため、サーバー環境、クラウド展開、クロスプラットフォーム アプリケーションに最適です。 追加の API の詳細については、 IronXL の完全なドキュメントを確認してください。

IronXLエクスポートコード

次のコードは、トップレベルのステートメントを持つIronXLライブラリを使用して、DataTable を Excel ファイルに変換する方法を示しています。

using IronXL;
using System.Data;

// Create a sample DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));

dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
dt.Rows.Add(4, "Emily Davis", "Engineering", 80000);

// Create a new Excel workbook
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Employees");

// Write column headers to row 0
for (int i = 0; i < dt.Columns.Count; i++)
{
    sheet.SetCellValue(0, i, dt.Columns[i].ColumnName);
}

// Export DataTable rows to Excel cells
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        sheet.SetCellValue(i + 1, j, dt.Rows[i][j]);
    }
}

string filePath = @"C:\Reports\EmployeeReport_IronXL.xlsx";
workbook.SaveAs(filePath);
Console.WriteLine("Excel file created using IronXL.");
using IronXL;
using System.Data;

// Create a sample DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("EmployeeID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Columns.Add("Salary", typeof(decimal));

dt.Rows.Add(1, "John Smith", "Engineering", 75000);
dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
dt.Rows.Add(3, "Michael Chen", "Finance", 70000);
dt.Rows.Add(4, "Emily Davis", "Engineering", 80000);

// Create a new Excel workbook
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Employees");

// Write column headers to row 0
for (int i = 0; i < dt.Columns.Count; i++)
{
    sheet.SetCellValue(0, i, dt.Columns[i].ColumnName);
}

// Export DataTable rows to Excel cells
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        sheet.SetCellValue(i + 1, j, dt.Rows[i][j]);
    }
}

string filePath = @"C:\Reports\EmployeeReport_IronXL.xlsx";
workbook.SaveAs(filePath);
Console.WriteLine("Excel file created using IronXL.");
$vbLabelText   $csharpLabel

IronXL のアプローチは同様の論理構造に従いますが、構文がより明確で、COM の複雑さがありません。 WorkBook.Create メソッドは、指定された形式で新しいブックを初期化します -- ExcelFileFormat.XLSX は、Excel 2007 以降と互換性のある最新の Office Open XML ファイルを生成します。 ライブラリは、レガシー システム用の XLS もサポートしています。

SetCellValue は、標準 for .NET規則に一致する 0 ベースのインデックスを使用します。これにより、インデックス システム間の変換時によく発生する off-by-one エラーが削減されます。 このメソッドは型変換を自動的に処理します。整数、文字列、小数、および DateTime の値は、適切な Excel セル型で書き込まれます。

クリーンアップ コードがまったく存在しないことに注意してください。 IronXLオブジェクトは、ガベージ コレクターが自動的に処理する標準 for .NET管理オブジェクトです。 孤立したプロセスや COM 参照カウントを管理するリスクはありません。

Interop とIronXLを使用して DataTable を Excel C# にエクスポートする方法: 画像 1 - Excel 出力

Interop とIronXLを使用して DataTable を Excel C# にエクスポートする方法: 画像 2 - コンソール出力

ワークブック作成の詳細については、 IronXLスプレッドシート作成ガイドを参照してください。

再利用可能なエクスポート メソッドを作成するにはどうすればよいでしょうか?

本番環境アプリケーションでは、DataTable をExcelファイルにエクスポートできる再利用可能なメソッドが必要になることがよくあります。次の例は、エクスポートロジックをカプセル化し、null値を処理し、出力ディレクトリが存在しない場合は自動的に作成するヘルパーを示しています。その他のパタ​​ーンについては、 IronXLのサンプルページをご覧ください。

再利用可能なIronXLエクスポートヘルパー

using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;

// --- ExcelExporter helper ---

bool ExportToExcel(DataTable dt, string filePath)
{
    if (dt == null || dt.Rows.Count == 0)
        return false;

    try
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet sheet = workbook.CreateWorkSheet(dt.TableName ?? "Sheet1");

        // Bold headers in the first row
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            var cell = sheet.GetCellAt(0, i);
            cell.Value = dt.Columns[i].ColumnName;
            cell.Style.Font.Bold = true;
        }

        // Data rows
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                var value = dt.Rows[i][j];
                sheet.SetCellValue(
                    i + 1, j,
                    (value == DBNull.Value || value == null) ? "" : value
                );
            }
        }

        FileInfo fileInfo = new FileInfo(filePath);
        if (!fileInfo.Directory!.Exists)
            fileInfo.Directory.Create();

        workbook.SaveAs(filePath);
        return true;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Export failed: " + ex.Message);
        return false;
    }
}

// --- Usage ---

DataTable employees = new DataTable("Employees");
employees.Columns.Add("EmployeeID", typeof(int));
employees.Columns.Add("Name", typeof(string));
employees.Columns.Add("Department", typeof(string));
employees.Rows.Add(1, "John Smith", "Engineering");
employees.Rows.Add(2, "Sarah Johnson", "Marketing");

bool success = ExportToExcel(employees, @"C:\Reports\Export.xlsx");
Console.WriteLine(success ? "Export completed." : "Export failed.");
using IronXL;
using IronXl.Styles;
using System;
using System.Data;
using System.IO;

// --- ExcelExporter helper ---

bool ExportToExcel(DataTable dt, string filePath)
{
    if (dt == null || dt.Rows.Count == 0)
        return false;

    try
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet sheet = workbook.CreateWorkSheet(dt.TableName ?? "Sheet1");

        // Bold headers in the first row
        for (int i = 0; i < dt.Columns.Count; i++)
        {
            var cell = sheet.GetCellAt(0, i);
            cell.Value = dt.Columns[i].ColumnName;
            cell.Style.Font.Bold = true;
        }

        // Data rows
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                var value = dt.Rows[i][j];
                sheet.SetCellValue(
                    i + 1, j,
                    (value == DBNull.Value || value == null) ? "" : value
                );
            }
        }

        FileInfo fileInfo = new FileInfo(filePath);
        if (!fileInfo.Directory!.Exists)
            fileInfo.Directory.Create();

        workbook.SaveAs(filePath);
        return true;
    }
    catch (Exception ex)
    {
        Console.WriteLine("Export failed: " + ex.Message);
        return false;
    }
}

// --- Usage ---

DataTable employees = new DataTable("Employees");
employees.Columns.Add("EmployeeID", typeof(int));
employees.Columns.Add("Name", typeof(string));
employees.Columns.Add("Department", typeof(string));
employees.Rows.Add(1, "John Smith", "Engineering");
employees.Rows.Add(2, "Sarah Johnson", "Marketing");

bool success = ExportToExcel(employees, @"C:\Reports\Export.xlsx");
Console.WriteLine(success ? "Export completed." : "Export failed.");
$vbLabelText   $csharpLabel

ExportToExcel ヘルパーは任意の DataTable とファイル パス文字列を受け入れ、エクスポートが失敗した場合、またはテーブルが空の場合には false を返します。 セルに書き込む前に DBNull.Value をチェックすることで、欠損値を適切に処理します。 ディレクトリ作成手順により、DirectoryNotFoundException が新しいフォルダ パスへのスケジュールされたエクスポートを中断することが防止されます (これは、新しい環境に展開する場合の一般的な運用上の問題です)。

太字のヘッダーは cell.Style.Font.Bold = true を使用して適用され、追加の構成なしでプロフェッショナルな外観の出力が生成されます。 パターンは簡単に拡張でき、組織のレポート標準に合わせて背景色、境界線、列幅の自動調整などを追加できます。

大規模なデータセットを扱う場合、 IronXLパフォーマンス ガイドでは、メモリ割り当てを最小限に抑える一括書き込み戦略について説明しています。 このライブラリは、関連するオブジェクトのコレクションである DataSet -- を単一のワークブック内の複数のワークシートにエクスポートすることもサポートしており、これは複数シートのレポートに便利です。

両方のアプローチはセルの書式設定をどのように処理しますか?

プロフェッショナルな Excel エクスポートでは、太字のヘッダー、色付きのセル、境界線、数値の書式設定などの書式設定が必要になることがよくあります。 どちらのライブラリもスタイル設定をサポートしていますが、冗長性と信頼性の点で実装は大きく異なります。

IronXLによるフォーマット

using IronXL;
using IronXl.Styles;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Product", typeof(string));
dt.Columns.Add("Revenue", typeof(decimal));
dt.Rows.Add("Widget A", 15000.50m);
dt.Rows.Add("Widget B", 22500.75m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write headers with light blue background and bold font
for (int i = 0; i < dt.Columns.Count; i++)
{
    var cell = sheet.GetCellAt(0, i);
    cell.Value = dt.Columns[i].ColumnName;
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#ADD8E6");
    cell.Style.BottomBorder.SetColor("#000000");
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Write data rows
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        sheet.SetCellValue(i + 1, j, dt.Rows[i][j]);
    }
}

workbook.SaveAs(@"C:\Reports\FormattedReport_IronXL.xlsx");
Console.WriteLine("Formatted Excel file created.");
using IronXL;
using IronXl.Styles;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Product", typeof(string));
dt.Columns.Add("Revenue", typeof(decimal));
dt.Rows.Add("Widget A", 15000.50m);
dt.Rows.Add("Widget B", 22500.75m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write headers with light blue background and bold font
for (int i = 0; i < dt.Columns.Count; i++)
{
    var cell = sheet.GetCellAt(0, i);
    cell.Value = dt.Columns[i].ColumnName;
    cell.Style.Font.Bold = true;
    cell.Style.SetBackgroundColor("#ADD8E6");
    cell.Style.BottomBorder.SetColor("#000000");
    cell.Style.BottomBorder.Type = BorderType.Thin;
}

// Write data rows
for (int i = 0; i < dt.Rows.Count; i++)
{
    for (int j = 0; j < dt.Columns.Count; j++)
    {
        sheet.SetCellValue(i + 1, j, dt.Rows[i][j]);
    }
}

workbook.SaveAs(@"C:\Reports\FormattedReport_IronXL.xlsx");
Console.WriteLine("Formatted Excel file created.");
$vbLabelText   $csharpLabel

IronXL のスタイリング API はクリーンなオブジェクト モデルを使用します。 色の値は、#ADD8E6 (水色) などの標準の 16 進コードを受け入れるため、カラー システム間で変換することなく、企業のブランドと簡単に一致させることができます。 BorderType.Thin および BorderType.Thick は、列挙の検索を必要とせずに標準的な境界シナリオをカバーします。

Interop とIronXLを使用して DataTable を Excel C# にエクスポートする方法: 画像 3 - IronXL出力での書式設定

数値書式、条件付き書式、セル結合などのすべてのスタイル設定オプションについては、 IronXLセル スタイル設定ガイド境界線と配置のドキュメントを参照してください。

相互運用フォーマットの複雑さ

Interop 同等機能は、個々の Range オブジェクトにアクセスし、Interior.Color、および Borders.LineStyle などのプロパティを設定します。 各プロパティへのアクセスはCOMプロセス間呼び出しであるため、オーバーヘッドが増加し、Excelが応答しなくなった場合に例外が発生する可能性が高くなります。色の値はMarshal.ReleaseComObject呼び出し)を実行する必要があります。

この冗長性は、大きなワークシート全体に条件付き書式、列幅、または数値書式を適用するときに問題になります。 IronXL は、クラッシュ後に Excel プロセスが実行されたままになるリスクなしに、より少ないコード行数で同じシナリオを処理します。

.NETでの Excel エクスポートのベスト プラクティスは何ですか?

エクスポート ルーチン全体で一貫したプラクティスに従うことで、バグが削減され、保守性が向上し、コードのテストと展開が容易になります。

命名とパスの規則

エクスポートされたファイルには一貫した命名規則を使用します: {ReportName}_{Timestamp}.xlsx。 予測可能なファイル名により、自動クリーンアップとアーカイブが簡単になります。 出力ディレクトリをハードコーディング パスではなくアプリケーション構成に保存します。これにより、新しい環境にデプロイするときに DirectoryNotFoundException が防止されます。

エラーハンドリング

すべてのエクスポート ロジックを try-catch ブロックでラップし、失敗を診断するのに十分なコンテキストで例外をログに記録します。 スケジュールされたエクスポートの場合は、例外をスローするのではなく結果オブジェクトを返すことを検討してください。これにより、呼び出し元のサービスはクラッシュせずに再試行したり、オペレーターに警告したりできるようになります。 上記の ExportToExcel ヘルパーは、 bool 戻り値を使用してこのパターンを示しています。

大規模データセットの取り扱い

50,000 行を超えるデータセットの場合は、メモリ負荷を回避するためにデータをバッチでストリーミングします。 IronXL はプログレッシブ書き込みをサポートし、 OpenXML SDKは非常に大きなファイルに対して低レベルのストリーミングを提供します。 大規模なデータセットでは Interop を完全に避けてください。メモリ内モデルにより、規模が大きくなると大幅な速度低下が発生します。

クロスプラットフォームデプロイメント

アプリケーションがLinuxまたはmacOS(例えばDockerコンテナやAzure Linux App Services)上で実行される場合、 IronXLが唯一の選択肢となります。InteropはExcel COMサーバーに依存しているため、Windows以外では機能しません。 .NETクロスプラットフォーム展開ガイドを使用して、すべての依存関係がターゲット ランタイムで使用可能であることを確認します。

テスティング

エクスポート ロジックの単体テストでは、出力ファイルが存在し、予想される行数を含み、正しい列名が使用されていることを確認する必要があります。 IronXL の WorkBook.Load メソッドを使用すると、Excel を起動せずにテストでエクスポートされたファイルを簡単に読み戻すことができます。 例については、 IronXL読書ガイドを参照してください。

それぞれのアプローチをいつ選択すべきでしょうか?

適切な選択は、プロジェクトの特定の要件、展開環境、および長期的なメンテナンスの考慮事項によって異なります。

次の場合は Microsoft Office Excel Interop を選択します。

  • すでに相互運用性と移行に依存しているレガシー システムでの作業は実現可能ではありません。
  • マクロ、ピボット テーブル、グラフ自動化などの高度な Excel 機能には、完全な Excel アプリケーション オブジェクト モデルが必要です。
  • ユーザーが Microsoft Excel をインストールし、アプリケーションが対話的に実行されるデスクトップ アプリケーションを構築します。
  • 展開環境は完全に制御されており、Windows のみで、Office ライセンスがすでに配置されています。
  • 複雑な埋め込み数式や VBA コードを含む既存の Excel テンプレートを自動化します。

IronXLをお選びください:

  • Excel ファイルのエクスポートを生成する Web アプリケーション、REST API、またはバックグラウンド サービスを構築します。
  • Azure App Services 、AWS Lambda、Docker コンテナーなどのクラウド環境へのデプロイ。
  • Windows、Linux、または macOS の展開にクロスプラットフォーム サポートが必要です。
  • 相互運用性のサポートが制限されている.NET Framework 4.6.2 以降または最新 for .NETバージョンで作業します。
  • COM クリーンアップを気にせず、信頼性の高いリソース管理が必要です。
  • 運用サーバー上の Office ライセンスの依存関係を回避します。
  • 分離された Excel ファイルの生成が必要なマルチテナント アプリケーションの構築。
  • COM プロセス間通信のオーバーヘッドなしで大規模なデータセットを効率的に処理します。
  • XLSX、XLS、CSV、JSON、XML などの複数の形式にエクスポートする必要がある。

既存の Excel ファイルの読み取り数式の操作、複数のワークシートの管理などの追加のシナリオについては、 IronXLチュートリアルを参照してください。

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

DataTable を Excel ファイルにエクスポートすることは、ビジネス データを処理する.NETアプリケーションの基本要件です。 ソースがデータベース クエリ、複数の関連テーブルを持つ DataSet、または動的に構築されたメモリ内コレクションのいずれの場合でも、適切なライブラリの選択によって、展開の柔軟性と長期的な保守性が決まります。

Microsoft Office Excel Interop は長年にわたって開発者に役立ってきましたが、Office インストールへの依存、COM の複雑さ、サポートされていないサーバー シナリオ、リソース管理の課題などにより、最新のアプリケーション開発にはますます非実用的になっています。

IronXL は、これらの制限に対処する、よりクリーンな代替手段を提供します。 シンプルなNuGetインストール、Windows、Linux、macOS にまたがるクロスプラットフォーム サポート、および.NET規則に準拠した簡単な API により、Excel Interop ソリューションに影響する展開の悩みやリソース管理の落とし穴が解消されます。

開始するには、 NuGetからIronXLをインストールし、上記のコード例の 1 つをコピーして、テスト DataTable からクイック エクスポートを実行します。 IronXLクイック スタート ガイドでは、最も一般的なシナリオを数分で説明します。 実稼働の準備ができたら、 IronXLライセンス ページを確認して、チームの規模と展開モデルに適したオプションを見つけてください。 さらに詳しく調べるには、完全なIronXL API リファレンスと、コミュニティの例が記載されたIronXL GitHubリポジトリを参照してください。

よくある質問

C# で DataTables をエクスポートする場合、Excel Interop ではなくIronXLを使用する主な利点は何ですか?

IronXL は、サーバー上に Excel をインストールする必要なく、C# で DataTables を Excel にエクスポートするための、よりシンプルで効率的な方法を提供します。

IronXL は、Excel にエクスポートするときに大きな DataTables を処理できますか?

はい、 IronXLはパフォーマンスが最適化されており、大規模な DataTables を処理できるため、Excel ファイルへの迅速かつ確実なエクスポートが保証されます。

IronXL を使用してデータをエクスポートするには、Microsoft Excel をインストールする必要がありますか?

いいえ、 IronXLでは Microsoft Excel をインストールする必要がないため、サーバー側アプリケーションに最適です。

Interop と比較して、 IronXLDataTables のエクスポート プロセスがどのように簡素化されますか?

IronXL は、Interop に関連する複雑なセットアップと依存関係を排除し、DataTables をエクスポートするための簡単な API を提供することでプロセスを簡素化します。

IronXL は、DataTables を Excel にエクスポートするために.NET Coreと互換性がありますか?

はい、 IronXL は.NET Coreと完全に互換性があり、クロスプラットフォーム アプリケーションで DataTables を Excel にエクスポートできます。

IronXL はDataTables をどのようなファイル形式でエクスポートできますか?

IronXL は、DataTables を XLSX、XLS、CSV などのさまざまな Excel ファイル形式にエクスポートできます。

IronXL はExcel シートのスタイルと書式設定をサポートしていますか?

はい、 IronXL は高度なスタイル設定と書式設定のオプションをサポートしており、DataTables から洗練された Excel シートを作成できます。

IronXL を使用して C# で Excel 関連のタスクを自動化できますか?

はい、 IronXL は、DataTables のエクスポートから複雑なデータ分析操作まで、Excel 関連の幅広いタスクを自動化するために使用できます。

IronXLを初めて使用する開発者にとって、学習曲線はありますか?

IronXLは直感的で簡単に習得できるように設計されており、開発者がすぐに作業を開始できるように、豊富なドキュメントと例が用意されています。

IronXL を商用プロジェクトで使用する場合のライセンス オプションは何ですか?

IronXL は、商用利用のための永久ライセンスやサブスクリプション ライセンスなど、さまざまなプロジェクトのニーズに合わせてさまざまなライセンス オプションを提供します。

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

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