Microsoft Office Interop Excel C#を使ってExcelファイルを読む:OfficeなしでExcelファイルを作成する高速な方法
Microsoft オフィス相互運用 Excel C# を使用して Excel ファイルを読み込もうとしたことがある方なら、その煩わしさを既にご存知でしょう。バージョン不一致、COM オブジェクトのリーク、そしてコードを実行するすべてのマシンに Microsoft Office がインストールされている必要があるという厳しい要件などです。 この記事では、従来の相互運用アプローチについて説明し、その欠点を解説した後、 IronXL を使用することで、そのような煩わしさを一切感じることなく Excel ファイルを作成、読み取り、書き込む方法をご紹介します。
InteropライブラリはどのようにしてExcelワークブックを作成するのですか?
Microsoft.Office.Interop.Excel 名前空間は、Excel が内部的に使用する COM オブジェクト モデルと同じものを公開します。 この相互運用ライブラリを使用して Excel ファイルを読み込んだり作成したりするには、まず Application オブジェクトをインスタンス化し、その Workbooks コレクションに新しいワークブックを追加してから、個々のワークシートのセルにアクセスします。 次の例は、Microsoft.Office.Interop.Excel を使用して XLSX ファイルを作成し、セルに値を書き込む最小限のコンソール アプリケーションを示しています。
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
Console.WriteLine("Error: Excel is not properly installed.");
return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
// Create the Excel Application COM object
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
{
Console.WriteLine("Error: Excel is not properly installed.");
return;
}
// Add a new workbook and access the default worksheet
Excel.Workbook xlWorkBook = excelApp.Workbooks.Add(Type.Missing);
Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.ActiveSheet;
// Write data into specific cells
xlWorkSheet.Cells[1, 1] = "Product";
xlWorkSheet.Cells[1, 2] = "Price";
xlWorkSheet.Cells[2, 1] = "Widget";
xlWorkSheet.Cells[2, 2] = "29.99";
// Save as an XLSX file and clean up COM objects
string filepath = @"C:\Reports\products.xlsx";
xlWorkBook.SaveAs(filepath);
xlWorkBook.Close(false);
excelApp.Quit();
// Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet);
Marshal.ReleaseComObject(xlWorkBook);
Marshal.ReleaseComObject(excelApp);
Imports Excel = Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices
' Create the Excel Application COM object
Dim excelApp As Excel.Application = New Excel.Application()
If excelApp Is Nothing Then
Console.WriteLine("Error: Excel is not properly installed.")
Return
End If
' Add a new workbook and access the default worksheet
Dim xlWorkBook As Excel.Workbook = excelApp.Workbooks.Add(Type.Missing)
Dim xlWorkSheet As Excel.Worksheet = CType(xlWorkBook.ActiveSheet, Excel.Worksheet)
' Write data into specific cells
xlWorkSheet.Cells(1, 1) = "Product"
xlWorkSheet.Cells(1, 2) = "Price"
xlWorkSheet.Cells(2, 1) = "Widget"
xlWorkSheet.Cells(2, 2) = "29.99"
' Save as an XLSX file and clean up COM objects
Dim filepath As String = "C:\Reports\products.xlsx"
xlWorkBook.SaveAs(filepath)
xlWorkBook.Close(False)
excelApp.Quit()
' Release every COM object to prevent orphaned Excel processes
Marshal.ReleaseComObject(xlWorkSheet)
Marshal.ReleaseComObject(xlWorkBook)
Marshal.ReleaseComObject(excelApp)
上記のコードは、 Excelワークブックを作成し、ワークシートに行とセルの値を入力し、ファイルを保存した後、各COMオブジェクトを手動で解放します。 最後に行うクリーンアップは必須です。これをスキップすると、システム上でメモリを消費し続けるEXCEL.EXEのゴーストプロセスが残ってしまうでしょう。 また、このコードはApplicationオブジェクトがnullかどうかをチェックしている点にも注目してください。 Microsoft Officeがインストールされていない場合、それ以降のすべての行でエラーが発生します。 Office 相互運用ライブラリのバージョンは、マシンにインストールされている Office のバージョンと一致している必要があります。一致しない場合、FileNotFoundException や同様の実行時エラーが発生し、デバッグが非常に困難になります。
Visual Basic の開発者は、Excel の Microsoft.Office.Interop.Excel を使用する際にも同様の課題に直面します。これは、基盤となる COM インフラストラクチャが.NET言語間で同一であるためです。
相互運用性アプローチは、サーバーとクラウド上でどのような問題を引き起こすのか?
マイクロソフトは、サーバー環境でのOffice Interopの使用を明確に推奨していません。 相互運用ライブラリは、舞台裏でExcelアプリケーションの完全なインスタンスを起動します。つまり、Webサーバーやクラウドアプリへのすべてのリクエストによって、非表示のWindowsデスクトッププロセスが起動されるということです。 Linuxサーバー上では、全く動作しません。 Officeがインストールされていない場合、または異なるバージョンのMicrosoft Officeが互いに競合している場合、データベースへの接続文字列、ファイルシステムパス、およびユーザー権限はすべて、障害発生の新たな原因となります。
開発者たちは、Excelがインストールされていない環境でExcelファイルを読み込んだり作成したりする方法を求めて、 Stack OverflowやMicrosoft Q&Aにこれらの問題について頻繁に投稿している。 以下の表に主な違いをまとめました。
| フィーチャー | オフィス相互運用 |IronXL| |---|---|---| | Excelがインストールされている必要があります | はい、開発者用マシンとすべての本番サーバーのみです。 | なし | | サポートされているExcelファイル形式 | XLS、XLSX | XLS、XLSX、CSV、TSV、JSON、XML | | クロスプラットフォーム(.NET Core、Linux、macOS) |Windowsのみ| Windows、Linux、macOS、Azure | | COMオブジェクトのクリーンアップが必要です | はい — 手動で Marshal.ReleaseComObject を実行します | なし | | サーバー/クラウド展開 | マイクロソフトは推奨していません |完全サポート| |パフォーマンス| 動作が遅い — 隠しExcelプロセスを起動する | パフォーマンスの向上 — マネージド.NETコード | | .NET Frameworkおよび.NET Core のサポート | .NET Frameworkのみ | .NET Framework、 .NET Core、 .NET 5~10 |
Microsoft Officeがインストールされていない環境でExcelファイルを作成する方法はありますか?
IronXLは、Excelファイルの読み書きおよび作成をすべてマネージドコードで行う.NET Excelライブラリです。 Microsoft Officeへの依存関係はなく、リリースすべきCOMオブジェクトもなく、デバッグすべきバージョン競合もありません。 Visual StudioのソリューションエクスプローラーでNuGet経由でインストールし、 "IronXl.Excel"を検索すれば準備完了です。 .NET Framework 4.6.2以降、 .NET Core、および.NET 5から.NET 10まで、主要なすべてのオペレーティングシステムで正常に動作します。
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
using IronXL;
// Create a new Excel workbook — default value is XLSX format
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
// Add a worksheet and populate cells with data
WorkSheet workSheet = workBook.CreateWorkSheet("Sales");
workSheet["A1"].Value = "Product";
workSheet["B1"].Value = "Price";
workSheet["A2"].Value = "Widget";
workSheet["B2"].Value = 29.99;
// Apply basic formatting
workSheet["A1"].Style.Font.Bold = true;
workSheet["B1"].Style.Font.Bold = true;
// Save the XLSX file
workBook.SaveAs(@"C:\Reports\products.xlsx");
Imports IronXL
' Create a new Excel workbook — default value is XLSX format
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
' Add a worksheet and populate cells with data
Dim workSheet As WorkSheet = workBook.CreateWorkSheet("Sales")
workSheet("A1").Value = "Product"
workSheet("B1").Value = "Price"
workSheet("A2").Value = "Widget"
workSheet("B2").Value = 29.99
' Apply basic formatting
workSheet("A1").Style.Font.Bold = True
workSheet("B1").Style.Font.Bold = True
' Save the XLSX file
workBook.SaveAs("C:\Reports\products.xlsx")
IronXLで作成されたExcelファイル
Read Excel File Using Microsoft オフィス相互運用 Excel C#:そしてOfficeなしでExcelファイルを作成する高速な方法:画像1 - IronXL出力ファイル。
上記のコードは、Interopの例と同じ結果を実現しますが、行数は半分で、外部依存関係は一切ありません。 WorkBook.Create() は、指定されたExcel ファイル形式(デフォルトでは XLSX) で新しいワークブックを初期化し、CreateWorkSheet は名前付きワークシートを追加します。 セル値は簡潔なインデクサー構文で設定され、SaveAsはファイル拡張子を自動的に処理します。 Quit() も Marshal.ReleaseComObject も、隠しプロセスもありません。 同じAPIは、単一のメソッド呼び出しでXLS、CSV、JSON、またはXML形式での保存もサポートしています。利用可能なすべてのオプションについては、エクスポートに関するドキュメントを参照してください。
IronXLはSystem.Dataオブジェクトともスムーズに統合されるため、データベース接続文字列からDataTableを経由して流れてくるデータを、手動で1行ずつ処理することなく、ワークシートに直接書き込むことができます。
ワークシートのデータを、行やセルをまたいで読み書きするにはどうすればよいですか?
既存のExcelファイルを読み込むのも同様に簡単です。 WorkBook.Load メソッドは、任意の XLS、XLSX、または CSV ファイルへの文字列ファイルパスを受け取ります。指定されたファイルパスに基づいて、各ワークシートは行とセルを反復可能なコレクションとして公開するため、データの読み取り、値の変更、結果のデータベースまたはサーバーエンドポイントへのアップロードが容易に行えます。
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
foreach (var cell in row.ToArray())
{
Console.Write(cell.Value + "\t");
}
Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
using IronXL;
// Load an existing Excel file
WorkBook workBook = WorkBook.Load(@"C:\Reports\products.xlsx");
WorkSheet workSheet = workBook.DefaultWorkSheet;
// Read and display each row of data
foreach (var row in workSheet.Rows)
{
foreach (var cell in row.ToArray())
{
Console.Write(cell.Value + "\t");
}
Console.WriteLine();
}
// Update a specific cell and save
workSheet["B2"].Value = 34.99;
workBook.SaveAs(@"C:\Reports\products_updated.xlsx");
Imports IronXL
' Load an existing Excel file
Dim workBook As WorkBook = WorkBook.Load("C:\Reports\products.xlsx")
Dim workSheet As WorkSheet = workBook.DefaultWorkSheet
' Read and display each row of data
For Each row In workSheet.Rows
For Each cell In row.ToArray()
Console.Write(cell.Value & vbTab)
Next
Console.WriteLine()
Next
' Update a specific cell and save
workSheet("B2").Value = 34.99
workBook.SaveAs("C:\Reports\products_updated.xlsx")
IronXLでExcelファイルを読み込む
この例では、Rowsコレクションを反復処理し、各セルのValueプロパティにアクセスすることで、 Excelファイルを読み込む方法を示します。 入れ子になったループパターン(var rowの後にvar cellが続く)は、スプレッドシートを自然に考える方法を反映しています。 データは読み込まれた後、コードは単一のセルを更新し、元のデータを保持したまま、ワークブックを新しいXLSXファイルに保存します。 IronXLは、シートが変更されるとExcelの数式を自動的に再計算します。これは相互運用ライブラリにも搭載されている機能ですが、ライブラリの場合は完全なExcelインスタンスを起動する必要があるという欠点があります。
数式、条件付き書式設定、セルの結合、複数シートの操作など、より高度なシナリオについては、 IronXL APIリファレンスに利用可能なすべてのメソッドとプロパティが網羅されています。 このライブラリはASP.NETコントローラーからのアクセスもサポートしているため、サーバーにOfficeをインストールすることなく、WebアプリやAPIエンドポイントからExcelファイルを簡単に生成およびダウンロードできます。
.NETを使ったExcel自動化における最適な今後の方向性とは?
プロジェクトが、Microsoft Officeが既にインストールされており、同じバージョンが安定して使用される従来のWindowsデスクトップ環境に限定されている場合、相互運用ライブラリは基本的なタスクであれば問題なく機能します。 しかし、それ以外のあらゆる場面、つまりサーバーへのデプロイ、クラウドアプリ、クロスプラットフォームビルド、あるいはパフォーマンスの向上とランタイムエラーの削減が求められるシナリオにおいては、スタンドアロンの.NET Excelライブラリが明らかに最適な選択肢となります。
IronXLは、 .NETが動作するあらゆる環境で動作する、クリーンでモダンなAPIを通じて、一般的なExcel操作(ワークブックの作成、Excelスプレッドシートデータの読み取り、セルへの書き込み、XLSやXLSXを含む複数のファイル拡張子での保存)をすべて処理します。 C#とVisual Basicの両方のプロジェクトをサポートしており、同じコードを修正することなくWindows、Linux、macOSで動作します。
30日間の無料トライアルを開始して、ご自身のプロジェクトでテストするか、導入準備が整ったらライセンスオプションを検討してください。
よくある質問
C#でMicrosoft Office Interop Excelを使用する際の制限は何ですか?
C#でMicrosoft Office Interop Excelを使用すると、バージョンの不一致、COMオブジェクトのリーク、コードを実行するすべてのマシンにMicrosoft Officeをインストールする必要があるなどの問題が発生する可能性があります。
IronXLはC#でExcelファイルを扱うプロセスをどのように改善しますか?
IronXLは、Microsoft Officeを使用せずにExcelファイルの作成、読み込み、書き込みを可能にし、バージョンの不一致やCOMオブジェクトのリークなどの問題を解消します。
IronXL はMicrosoft Officeがインストールされていないサーバーでも使用できますか?
IronXLはサーバーセーフで、Microsoft Officeをインストールする必要がなく、Excelファイルを扱うためのクロスプラットフォーム・ソリューションです。
Excel InteropよりもIronXLを使用する利点は何ですか?
IronXLはMicrosoft Officeに依存しないため、より信頼性が高く効率的なExcelファイルの処理方法を提供し、バージョンの不一致やCOMオブジェクトのリークといった一般的な問題のリスクを低減します。
IronXLはすべてのバージョンのExcelファイルに対応していますか?
IronXLはXLSX、XLS、CSV、TSVを含む幅広いExcelファイル形式をサポートしており、様々なExcelファイル操作に対応します。
IronXLを使用するには特別な設定が必要ですか?
IronXLはMicrosoft Officeのインストールを必要とせず、特別な設定なしにC#プロジェクトに簡単に統合できます。
IronXLは大規模なExcelファイルを効率的に処理できますか?
IronXLは大きなExcelファイルを効率的に読み書きするように設計されており、Interopの制限を受けずに高速なパフォーマンスを提供します。
IronXLはどのようなプラットフォームをサポートしていますか?
IronXLはWindows、Linux、MacOSをサポートするクロスプラットフォームであるため、さまざまな環境でのExcelファイル操作に柔軟に対応できます。
IronXLはExcelファイル作成をどのように処理しますか?
IronXLはC#でプログラム的にExcelファイルを作成するためのわかりやすいAPIを提供し、セルの書式設定やワークシートの管理などの機能を提供します。
IronXLユーザー向けのコミュニティやサポートはありますか?
IronXLユーザーは、ドキュメント、チュートリアル、コミュニティサポートにアクセスし、統合や使用方法に関する質問をすることができます。




