透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
この記事では、IronXLソフトウェアとEPPlusソフトウェアの類似点と相違点について検討します。
ほとんどの組織にとって、Microsoft Excel は非常に有用なツールであることが証明されています。 Excelファイルは、データベースなどの形式でセルにデータを含んでおり、非常に簡単にデータを管理し保存することができます。
.xlsおよび.xlsxファイル形式は、Excelでも使用されます。 C#言語では、Excelファイルの管理が難しいことがあります。 しかし、IronXLおよびEPPlusソフトウェアはこれらのプロセスをより簡単に処理できます。
このソフトウェアを使用する際にMicrosoft Officeは必要ありません。
C#でExcelファイルを読み書きする際に、Microsoft Officeをインストールする必要はありません。 今日は、簡単に実装できるいくつかの異なるオプションを見てみましょう。
ExcelPackage を利用して Excel ファイルを読み取りますLoadFromDataTable メソッドを使用して、Excel シートに迅速にデータを入力するEPPlusは、Office Open XMLスプレッドシートを処理するためのNuGetベースの.NET Framework/.NET Coreライブラリです。 バージョン 5 には、.NET Framework 3.5 と .NET Core 2.0 のサポートが含まれています。EPPlus は Microsoft Excel のような他のライブラリに依存しません。
EPPlusには、Office Excelドキュメントを操作するためのAPIがあります。 EPPlusは、Office OpenXML形式のExcelファイルを読み書きするための.NETライブラリです。 このライブラリはNuGetからパッケージとして利用できます。
このライブラリはプログラマーを念頭に置いて作成されました。 目標は、Excelや他のスプレッドシートライブラリに精通している開発者が、APIを迅速に習得できるようにすることです。 あるいは、誰かが言ったように、「IntelliSense で勝利をつかもう!」
EPPlusをVisual Studioにインストールするには、[表示] > [その他のウィンドウ] > [パッケージ マネージャー コンソール]に移動し、次のコマンドを入力してください:
PM> Install-Package EPPlus
.NET CLIを利用したい場合は、管理者権限のコマンドプロンプトまたはPowerShellプロンプトから以下のコマンドを実行してください:
PM> dotnet add package EPPlus
EPPlusは、プロジェクトに追加できるドットネットパッケージです。
IronXLは、シンプルなC#およびVBのExcel APIで、.NET環境でExcelスプレッドシートファイルを高速に読み取り、編集、作成することができます。 Microsoft OfficeやExcel Interopをインストールする必要はありません。このライブラリはExcelファイルを取り扱うためにも使用できます。
IronXLは、.NET Core、.NET Framework、Xamarin、モバイル、Linux、macOS、およびAzureをすべてサポートしています。
スプレッドシートにデータを読み書きするには、さまざまな方法があります。
IronXLパッケージをアカウントに追加する方法は3つありますので、最適な方法を選択することができます。
パッケージマネージャーコンソールを使用してIronXLをインストールする
プロジェクト内のパッケージ マネージャー コンソールを開くには、次のコマンドを使用してください:
パッケージ マネージャー コンソールにアクセスするには、ツール => NuGet パッケージ マネージャー => パッケージ マネージャー コンソールに移動します。

これでパッケージ マネージャー コンソールに移動します。 次に、パッケージ マネージャーのターミナルで、次のコマンドを入力します。
PM > Install-Package IronXL.Excel

NuGet パッケージ マネージャーを使用して IronXL をインストールする
これは、NuGetパッケージマネージャーをインストールするための異なるアプローチです。 以前の方法でインストールを完了している場合、このアプローチを利用する必要はありません。
NuGet パッケージ マネージャーにアクセスするには、[ツール] > [NuGet パッケージ マネージャー] => ドロップダウン メニューから [ソリューションの NuGet パッケージの管理] を選択します。
これはNuGetソリューションを起動します。 「参照」を選択し、IronXL を探します。
検索バーに「Excel」と入力します。
 
「インストール」ボタンをクリックすると、IronXLがインストールされます。 IronXLをインストールした後、フォームに移動して開発を開始できます。
IronXLを使用した新しいExcelワークブックの作成はとても簡単です! それはたった1行のコードです! はい、これは本当です。
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)IronXLは、XLS(旧Excelファイルバージョン)およびXLSX(現在および新しいExcelファイルバージョン)形式でファイルを作成できます。
既定のワークシートを設定する
デフォルトのワークシートを設定するのはさらに簡単です。
var sheet = workbook.CreateWorkSheet("2020年予算");
上記のコードスニペットではワークシートは "Sheet" で表されており、それを使用してセルの値を設定し、Excelができるほとんどすべての操作を行うことができます。 Excelドキュメントを読み取り専用ファイルとしてコード化し、削除操作を実行することもできます。 Excel のように、ワークシートをリンクすることもできます。
ワークブックとワークシートの違いを明確にしましょう。ご不明の場合に備えて。
ワークシートはワークブックに含まれています。 これは、ワークブックに好きなだけ多くのワークシートを入れることができるということです。 後の記事でこれを行う方法について説明します。 行と列でワークシートが構成されています。 行と列の交差点はセルと呼ばれ、これがExcelで対話する部分です。
EPPlusは、Excelファイルの作成や、ピボットテーブル、ピボットエリアの作成、さらには条件付き書式設定やフォントの変更などの操作を行うために使用できます。 それでは、通常のDataTableをXLSX形式のExcelファイルに変換し、ユーザーにダウンロードさせるための全ソースコードを以下に示します:
public ActionResult ConvertToXLSX()
{
    byte [] fileData = null;
    // replace the GetDataTable() method with your DBMS-fetching code.
    using (DataTable dt = GetDataTable())
    {
        // create an empty spreadsheet
        using (var p = new ExcelPackage())
        {
            // add a worksheet to the spreadsheet
            ExcelWorksheet ws = p.Workbook.Worksheets.Add(dt.TableName);
            // Initialize rows and cols counter: note that they are 1-based!
            var row = 1;
            var col = 1;
            // Create the column names on the first line.
            // In this sample we'll just use the DataTable colum names
            row = 1;
            col = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                col++;
                ws.SetValue(row, col, dc.ColumnName);
            }
            // Insert the DataTable rows to the XLS file
            foreach (DataRow r in dt.Rows)
            {
                row++;
                col = 0;
                foreach (DataColumn dc in dt.Columns)
                {
                    col++;
                    ws.SetValue(row, col, r [dc].ToString());
                }
                // alternate light-gray color for uneven rows (3, 5, 7, 9)...
                if (row % 2 != 0)
                {
                    ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                    ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
                }
            }
            // output the XLSX file
            using (var ms = new MemoryStream())
            {
                p.SaveAs(ms);
                ms.Seek(0, SeekOrigin.Begin);
                fileData = ms.ToArray();
            }
        }
    }
    string fileName = "ConvertedFile.xlsx";
    string contentType = System.Web.MimeMapping.GetMimeMapping(fileName);
    Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
    return File(fileData, contentType);
}public ActionResult ConvertToXLSX()
{
    byte [] fileData = null;
    // replace the GetDataTable() method with your DBMS-fetching code.
    using (DataTable dt = GetDataTable())
    {
        // create an empty spreadsheet
        using (var p = new ExcelPackage())
        {
            // add a worksheet to the spreadsheet
            ExcelWorksheet ws = p.Workbook.Worksheets.Add(dt.TableName);
            // Initialize rows and cols counter: note that they are 1-based!
            var row = 1;
            var col = 1;
            // Create the column names on the first line.
            // In this sample we'll just use the DataTable colum names
            row = 1;
            col = 0;
            foreach (DataColumn dc in dt.Columns)
            {
                col++;
                ws.SetValue(row, col, dc.ColumnName);
            }
            // Insert the DataTable rows to the XLS file
            foreach (DataRow r in dt.Rows)
            {
                row++;
                col = 0;
                foreach (DataColumn dc in dt.Columns)
                {
                    col++;
                    ws.SetValue(row, col, r [dc].ToString());
                }
                // alternate light-gray color for uneven rows (3, 5, 7, 9)...
                if (row % 2 != 0)
                {
                    ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
                    ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
                }
            }
            // output the XLSX file
            using (var ms = new MemoryStream())
            {
                p.SaveAs(ms);
                ms.Seek(0, SeekOrigin.Begin);
                fileData = ms.ToArray();
            }
        }
    }
    string fileName = "ConvertedFile.xlsx";
    string contentType = System.Web.MimeMapping.GetMimeMapping(fileName);
    Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName));
    return File(fileData, contentType);
}Public Function ConvertToXLSX() As ActionResult
	Dim fileData() As Byte = Nothing
	' replace the GetDataTable() method with your DBMS-fetching code.
	Using dt As DataTable = GetDataTable()
		' create an empty spreadsheet
		Using p = New ExcelPackage()
			' add a worksheet to the spreadsheet
			Dim ws As ExcelWorksheet = p.Workbook.Worksheets.Add(dt.TableName)
			' Initialize rows and cols counter: note that they are 1-based!
			Dim row = 1
			Dim col = 1
			' Create the column names on the first line.
			' In this sample we'll just use the DataTable colum names
			row = 1
			col = 0
			For Each dc As DataColumn In dt.Columns
				col += 1
				ws.SetValue(row, col, dc.ColumnName)
			Next dc
			' Insert the DataTable rows to the XLS file
			For Each r As DataRow In dt.Rows
				row += 1
				col = 0
				For Each dc As DataColumn In dt.Columns
					col += 1
					ws.SetValue(row, col, r (dc).ToString())
				Next dc
				' alternate light-gray color for uneven rows (3, 5, 7, 9)...
				If row Mod 2 <> 0 Then
					ws.Row(row).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid
					ws.Row(row).Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray)
				End If
			Next r
			' output the XLSX file
			Using ms = New MemoryStream()
				p.SaveAs(ms)
				ms.Seek(0, SeekOrigin.Begin)
				fileData = ms.ToArray()
			End Using
		End Using
	End Using
	Dim fileName As String = "ConvertedFile.xlsx"
	Dim contentType As String = System.Web.MimeMapping.GetMimeMapping(fileName)
	Response.AppendHeader("Content-Disposition", String.Format("attachment;filename={0}", fileName))
	Return File(fileData, contentType)
End Functionご覧のように、これは任意のASP.NET MVCコントローラーで使用できるActionResultメソッドです。 ASP.NET MVCを使用していない場合は、メソッドの内容をコピーして必要な場所(古典的なASP.NET、コンソールアプリケーション、Windowsフォームなど)に貼り付けるだけです。
コードは自己説明的であり、さまざまな処理プロセスを理解するための十分なコメントが付いています。 まずは、ここで何をしているのか簡単におさらいしましょう:
HTMLの回答を作成し、Content-Disposition添付ファイルとしてXLSXファイルをユーザーに送信し、ブラウザが自動的にファイルをダウンロードするようにします。
この場合、IronXL が勝利する理由は、作成プロセスが非常に簡単だからです。一行のコードだけで開始できます。 これにより、時間を節約しデバッグが簡単になります。一方、EPPlusは確認するのが退屈でデバッグが難しいコード行を提供します。
EPPlusはExcelファイルの操作に対応しています。 これは、Excelファイルを読み書きする .NET ライブラリです。
Excelファイルの読み取り
これを行うには、まずパッケージEPPlusをインストールする必要があります。「ツール」->「NuGetパッケージマネージャー」->「このソリューションのNuGetを管理」->「EPPlusをインストール」->「EPPlusをインストール」->「EPPlusをインストール」->「EPPlusをインストール」->「EPPlusをインストール」->「EPPlusをインストール」->「EPをインストール」「ブラウズ」タブで「EPPlus」を検索し、NuGetパッケージをインストールします。

以下のコードを、パッケージをインストールした後にコンソールアプリケーション「Program.cs」で使用できます。
using OfficeOpenXml;
using System;
using System.IO;
namespace ReadExcelInCsharp
{
    class Program
    {
        static void Main(string [] args)
        {
            //provide file path
            FileInfo existingFile = new FileInfo(@"D:\sample_XLSX.xlsx");
            //use EPPlus
            using (ExcelPackage package = new ExcelPackage(existingFile))
            {
                //get the first worksheet in the workbook
                ExcelWorksheet worksheet = package.Workbook.Worksheets [1];
                int colCount = worksheet.Dimension.End.Column;  //get Column Count
                int rowCount = worksheet.Dimension.End.Row;     //get row count
                for (int row = 1; row <= rowCount; row++)
                {
                    for (int col = 1; col <= colCount; col++)
                    {
                        //Print data, based on row and columns position
                        Console.WriteLine(" Row:" + row + " column:" + col + " Value:" + worksheet.Cells [row, col].Value?.ToString().Trim());
                    }
                }
            }
        }
    }
}using OfficeOpenXml;
using System;
using System.IO;
namespace ReadExcelInCsharp
{
    class Program
    {
        static void Main(string [] args)
        {
            //provide file path
            FileInfo existingFile = new FileInfo(@"D:\sample_XLSX.xlsx");
            //use EPPlus
            using (ExcelPackage package = new ExcelPackage(existingFile))
            {
                //get the first worksheet in the workbook
                ExcelWorksheet worksheet = package.Workbook.Worksheets [1];
                int colCount = worksheet.Dimension.End.Column;  //get Column Count
                int rowCount = worksheet.Dimension.End.Row;     //get row count
                for (int row = 1; row <= rowCount; row++)
                {
                    for (int col = 1; col <= colCount; col++)
                    {
                        //Print data, based on row and columns position
                        Console.WriteLine(" Row:" + row + " column:" + col + " Value:" + worksheet.Cells [row, col].Value?.ToString().Trim());
                    }
                }
            }
        }
    }
}Imports OfficeOpenXml
Imports System
Imports System.IO
Namespace ReadExcelInCsharp
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			'provide file path
			Dim existingFile As New FileInfo("D:\sample_XLSX.xlsx")
			'use EPPlus
			Using package As New ExcelPackage(existingFile)
				'get the first worksheet in the workbook
				Dim worksheet As ExcelWorksheet = package.Workbook.Worksheets (1)
				Dim colCount As Integer = worksheet.Dimension.End.Column 'get Column Count
				Dim rowCount As Integer = worksheet.Dimension.End.Row 'get row count
				For row As Integer = 1 To rowCount
					For col As Integer = 1 To colCount
						'Print data, based on row and columns position
						Console.WriteLine(" Row:" & row & " column:" & col & " Value:" & worksheet.Cells (row, col).Value?.ToString().Trim())
					Next col
				Next row
			End Using
		End Sub
	End Class
End Namespaceこちらは、サンプルのExcelファイル(.xlsx)を使用したコンソールアプリケーションの出力例です。 以下は、EPPlusを使用してC#で読み取るためのxlsxファイルです。
 
    複数のソースからデータを読み込むための次の方法は、"cells" プロパティ (ExcelRange) を使用してアクセスできます:
テキストファイルからCSVを読み取り、データをワークシートの範囲にロードするには、LoadFromText および LoadFromTextAsync を使用します。
LoadFromDataReaderAsyncおよびLoadFromDataReader— DataReaderからデータフィールドを範囲にロードします。
LoadFromArrays — IEnumerable のオブジェクト配列[]からデータをロードし、各オブジェクト配列がワークシート内の1行に対応します。
これらのメソッドを使用する際に、オプションとしてExcelテーブルを生成するためのパラメータを指定することができます。 サンプルプロジェクトの例4および5は、Sample-.NET FrameworkまたはSample-.NET Frameworkのもっと詳細な例を含んでいます。
Excelファイルの書き込み
次に、新しいExcelファイルにデータをエクスポートできるかどうか確認しましょう。
こちらは、Excel ドキュメントとして保存したいデータやオブジェクトのサンプルです。
List<UserDetails> persons = new List<UserDetails>()
            {
                new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
                new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
                new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
                new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
           };List<UserDetails> persons = new List<UserDetails>()
            {
                new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
                new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
                new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
                new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
           };Dim persons As New List(Of UserDetails)() From {
	New UserDetails() With {
		.ID="9999",
		.Name="ABCD",
		.City ="City1",
		.Country="USA"
	},
	New UserDetails() With {
		.ID="8888",
		.Name="PQRS",
		.City ="City2",
		.Country="INDIA"
	},
	New UserDetails() With {
		.ID="7777",
		.Name="XYZZ",
		.City ="City3",
		.Country="CHINA"
	},
	New UserDetails() With {
		.ID="6666",
		.Name="LMNO",
		.City ="City4",
		.Country="UK"
	}
}新しいExcelファイルを基本情報とともに作成するには、ExcelPackageクラスを使用する必要があります。 データをファイルに書き込み、新しいExcelスプレッドシートを生成するのに必要なのは、わずか数行のコードです。 次の1行でDataTablesをExcelシートに読み込む魔法が実行されることに注意してください。

シンプルにするために、同じプロジェクトフォルダ内で新しいスプレッドシートファイルを生成しています(Excelファイルはプロジェクトの「bin」フォルダに作成されます)。 ソースコードは以下の通りです:
private static void WriteToExcel(string path)
        {
            //Let use below test data for writing it to excel
            List<UserDetails> persons = new List<UserDetails>()
            {
                new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
                new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
                new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
                new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
           };
            // let's convert our object data to Datatable for a simplified logic.
            // Datatable is the easiest way to deal with complex datatypes for easy reading and formatting. 
            DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
            FileInfo filePath = new FileInfo(path);
            using (var excelPack = new ExcelPackage(filePath))
            {
                var ws = excelPack.Workbook.Worksheets.Add("WriteTest");
                ws.Cells.LoadFromDataTable(table, true, OfficeOpenXml.Table.TableStyles.Light8);
                excelPack.Save();
            }
        }private static void WriteToExcel(string path)
        {
            //Let use below test data for writing it to excel
            List<UserDetails> persons = new List<UserDetails>()
            {
                new UserDetails() {ID="9999", Name="ABCD", City ="City1", Country="USA"},
                new UserDetails() {ID="8888", Name="PQRS", City ="City2", Country="INDIA"},
                new UserDetails() {ID="7777", Name="XYZZ", City ="City3", Country="CHINA"},
                new UserDetails() {ID="6666", Name="LMNO", City ="City4", Country="UK"},
           };
            // let's convert our object data to Datatable for a simplified logic.
            // Datatable is the easiest way to deal with complex datatypes for easy reading and formatting. 
            DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
            FileInfo filePath = new FileInfo(path);
            using (var excelPack = new ExcelPackage(filePath))
            {
                var ws = excelPack.Workbook.Worksheets.Add("WriteTest");
                ws.Cells.LoadFromDataTable(table, true, OfficeOpenXml.Table.TableStyles.Light8);
                excelPack.Save();
            }
        }Private Shared Sub WriteToExcel(ByVal path As String)
			'Let use below test data for writing it to excel
			Dim persons As New List(Of UserDetails)() From {
				New UserDetails() With {
					.ID="9999",
					.Name="ABCD",
					.City ="City1",
					.Country="USA"
				},
				New UserDetails() With {
					.ID="8888",
					.Name="PQRS",
					.City ="City2",
					.Country="INDIA"
				},
				New UserDetails() With {
					.ID="7777",
					.Name="XYZZ",
					.City ="City3",
					.Country="CHINA"
				},
				New UserDetails() With {
					.ID="6666",
					.Name="LMNO",
					.City ="City4",
					.Country="UK"
				}
			}
			' let's convert our object data to Datatable for a simplified logic.
			' Datatable is the easiest way to deal with complex datatypes for easy reading and formatting. 
			Dim table As DataTable = CType(JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (GetType(DataTable))), DataTable)
			Dim filePath As New FileInfo(path)
			Using excelPack = New ExcelPackage(filePath)
				Dim ws = excelPack.Workbook.Worksheets.Add("WriteTest")
				ws.Cells.LoadFromDataTable(table, True, OfficeOpenXml.Table.TableStyles.Light8)
				excelPack.Save()
			End Using
End Sub上記のAPIコールでデータ検証を行った後、前述のカスタムオブジェクトを適切なExcelの列と行に変換して、新しいExcelファイルが作成され、以下の値が表示されます。
 
    上記のすぐに使用できるAPIは、.NET Coreコンソール、テストプロジェクト、またはASP.NET Coreアプリケーションで使用でき、ニーズに合わせてロジックを変更することができます。
これらの技術は、「cells」プロパティ(ExcelRange)を使用してアクセスすることができます。
値 — 範囲の値を返すか設定します。
次の GetValue メソッドおよび SetValue メソッドは、ワークシート オブジェクトに直接使用することもできます。 (これは、範囲で読み書きするよりもわずかに良い結果を提供します):
SetValue — 単一のセルの値を変更します。
Linqは、セルプロパティがIEnumerableインターフェイスを実装しているため、ワークシートからデータをクエリするために使用できます。
IronXLは、C#開発者がExcel、ピボットテーブル、その他のスプレッドシートファイルを迅速かつ簡単に操作できるようにする.NETライブラリです。
Office Interopは不要です。 CoreやAzureでは、特定の依存関係やMicrosoft Officeのインストールは必要ありません。
IronXLは、.NET Coreおよび.NET Framework向けの有名なC#およびVB.NET用のxlスプレッドシートライブラリです。
読み込むワークシート
ExcelシートはWorkBookクラスによって表されます。 C#でピボットテーブルを含むExcelファイルを開くために、WorkBookを使用します。 Excelファイルを読み込み、その場所を選択します(.xlsx)。
/**
Load WorkBook
anchor-load-a-workbook
**/
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");/**
Load WorkBook
anchor-load-a-workbook
**/
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");'''
'''Load WorkBook
'''anchor-load-a-workbook
'''*
Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")WorkSheetオブジェクトは多数のWorkBookに見られます。 これらはExcelドキュメントのワークシートです。 シートにワークシートが含まれている場合は、「WorkBook」の名前を使用してそれらを見つけてください。 GetWorkSheet (ゲットワークシート)
var worksheet = workbook.GetWorkSheet("GDPByCountry");var worksheet = workbook.GetWorkSheet("GDPByCountry");Dim worksheet = workbook.GetWorkSheet("GDPByCountry")自分のワークブックを作成しましょう。
シートタイプを使用してメモリ内に新しいWorkBookを生成するために、新しいWorkBookを構築します。
/**
Create WorkBook
anchor-create-a-workbook
**/
var workbook = new WorkBook(ExcelFileFormat.XLSX);/**
Create WorkBook
anchor-create-a-workbook
**/
var workbook = new WorkBook(ExcelFileFormat.XLSX);'''
'''Create WorkBook
'''anchor-create-a-workbook
'''*
Dim workbook As New WorkBook(ExcelFileFormat.XLSX)ヴィンテージのMicrosoft Excelスプレッドシートには、ExcelFileFormat.XLS(95以前)を使用します。
まだワークシートがない場合は、作成してください。
各「WorkBook」には多数の「WorkSheet」を含むことができます。「WorkSheet」は単一のデータシートですが、「WorkBook」は複数のWorkSheetのコレクションです。 Excelでは、2つのワークシートを含む1つのワークブックはこのように見えます。
 
    WorkBookは、新しいWorkSheetを構築する際に使用する名前です。
var worksheet = workbook.CreateWorkSheet("Countries");var worksheet = workbook.CreateWorkSheet("Countries");Dim worksheet = workbook.CreateWorkSheet("Countries")CreateWorkSheet にワークシートの名前を渡します。
セルラーレンジを取得する
「Range」クラスは、「Cell」オブジェクトの二次元コレクションを表しています。 それは特定の範囲のExcelセルを示します。 WorkSheetオブジェクトの文字列インデクサーを使用して、範囲を取得することができます。
var range = worksheet ["D2:D101"];var range = worksheet ["D2:D101"];Dim range = worksheet ("D2:D101")引数テキストは、セルの座標(例えば「A1」)または左から右、上から下のセル範囲(例:「B2:E5」)にすることができます。 GetRangeは、WorkSheetから呼び出すこともできます。
範囲内でセルの値を編集
範囲内のセルの値は、さまざまな方法で読み取ったり編集したりすることができます。 カウントがわかっている場合は、Forループを使用してください。 ここからセルのスタイリングもできます。
/**
Edit Cell Values in Range
anchor-edit-cell-values-within-a-range
**/
//Iterate through the rows
for (var y = 2; y <= 101; y++)
{
    var result = new PersonValidationResult { Row = y };
    results.Add(result);
    //Get all cells for the person
    var cells = worksheet [$"A{y}:E{y}"].ToList();
    //Validate the phone number (1 = B)
    var phoneNumber = cells [1].Value;
    result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
    //Validate the email address (3 = D)
    result.EmailErrorMessage = ValidateEmailAddress((string)cells [3].Value);
    //Get the raw date in the format of Month Day [suffix], Year (4 = E)
    var rawDate = (string)cells [4].Value;
    result.DateErrorMessage = ValidateDate(rawDate);
}/**
Edit Cell Values in Range
anchor-edit-cell-values-within-a-range
**/
//Iterate through the rows
for (var y = 2; y <= 101; y++)
{
    var result = new PersonValidationResult { Row = y };
    results.Add(result);
    //Get all cells for the person
    var cells = worksheet [$"A{y}:E{y}"].ToList();
    //Validate the phone number (1 = B)
    var phoneNumber = cells [1].Value;
    result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
    //Validate the email address (3 = D)
    result.EmailErrorMessage = ValidateEmailAddress((string)cells [3].Value);
    //Get the raw date in the format of Month Day [suffix], Year (4 = E)
    var rawDate = (string)cells [4].Value;
    result.DateErrorMessage = ValidateDate(rawDate);
}'''
'''Edit Cell Values in Range
'''anchor-edit-cell-values-within-a-range
'''*
'Iterate through the rows
For y = 2 To 101
	Dim result = New PersonValidationResult With {.Row = y}
	results.Add(result)
	'Get all cells for the person
	Dim cells = worksheet ($"A{y}:E{y}").ToList()
	'Validate the phone number (1 = B)
	Dim phoneNumber = cells (1).Value
	result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
	'Validate the email address (3 = D)
	result.EmailErrorMessage = ValidateEmailAddress(CStr(cells (3).Value))
	'Get the raw date in the format of Month Day [suffix], Year (4 = E)
	Dim rawDate = CStr(cells (4).Value)
	result.DateErrorMessage = ValidateDate(rawDate)
Next yスプレッドシート内のデータを検証する
データシートを検証するには、IronXLを使用してください。 データ検証サンプルでは、libphonenumber-CSharpを使用して電話番号を検証し、従来のC# APIを使用してメールアドレスと日付を検証します。
/**
Validate Spreadsheet Data
anchor-validate-spreadsheet-data
**/
//Iterate through the rows
for (var i = 2; i <= 101; i++)
{
    var result = new PersonValidationResult { Row = i };
    results.Add(result);
    //Get all cells for the person
    var cells = worksheet [$"A{i}:E{i}"].ToList();
    //Validate the phone number (1 = B)
    var phoneNumber = cells [1].Value;
    result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
    //Validate the email address (3 = D)
    result.EmailErrorMessage = ValidateEmailAddress((string)cells [3].Value);
    //Get the raw date in the format of Month Day [suffix], Year (4 = E)
    var rawDate = (string)cells [4].Value;
    result.DateErrorMessage = ValidateDate(rawDate);
}/**
Validate Spreadsheet Data
anchor-validate-spreadsheet-data
**/
//Iterate through the rows
for (var i = 2; i <= 101; i++)
{
    var result = new PersonValidationResult { Row = i };
    results.Add(result);
    //Get all cells for the person
    var cells = worksheet [$"A{i}:E{i}"].ToList();
    //Validate the phone number (1 = B)
    var phoneNumber = cells [1].Value;
    result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, (string)phoneNumber);
    //Validate the email address (3 = D)
    result.EmailErrorMessage = ValidateEmailAddress((string)cells [3].Value);
    //Get the raw date in the format of Month Day [suffix], Year (4 = E)
    var rawDate = (string)cells [4].Value;
    result.DateErrorMessage = ValidateDate(rawDate);
}'''
'''Validate Spreadsheet Data
'''anchor-validate-spreadsheet-data
'''*
'Iterate through the rows
For i = 2 To 101
	Dim result = New PersonValidationResult With {.Row = i}
	results.Add(result)
	'Get all cells for the person
	Dim cells = worksheet ($"A{i}:E{i}").ToList()
	'Validate the phone number (1 = B)
	Dim phoneNumber = cells (1).Value
	result.PhoneNumberErrorMessage = ValidatePhoneNumber(phoneNumberUtil, CStr(phoneNumber))
	'Validate the email address (3 = D)
	result.EmailErrorMessage = ValidateEmailAddress(CStr(cells (3).Value))
	'Get the raw date in the format of Month Day [suffix], Year (4 = E)
	Dim rawDate = CStr(cells (4).Value)
	result.DateErrorMessage = ValidateDate(rawDate)
Next i上記のコードはスプレッドシートの行をループし、セルをリストとして取得します。各検証されたメソッドはセルの値を確認し、その値が正しくない場合にエラーを返します。
このコードは新しいシートを作成し、ヘッダーを指定し、不正なデータログを保持するためにエラーメッセージの結果を生成します。
var resultsSheet = workbook.CreateWorkSheet("Results");
resultsSheet ["A1"].Value = "Row";
resultsSheet ["B1"].Value = "Valid";
resultsSheet ["C1"].Value = "Phone Error";
resultsSheet ["D1"].Value = "Email Error";
resultsSheet ["E1"].Value = "Date Error";
for (var i = 0; i < results.Count; i++)
{
    var result = results [i];
    resultsSheet [$"A{i + 2}"].Value = result.Row;
    resultsSheet [$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
    resultsSheet [$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
    resultsSheet [$"D{i + 2}"].Value = result.EmailErrorMessage;
    resultsSheet [$"E{i + 2}"].Value = result.DateErrorMessage;
}
workbook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");var resultsSheet = workbook.CreateWorkSheet("Results");
resultsSheet ["A1"].Value = "Row";
resultsSheet ["B1"].Value = "Valid";
resultsSheet ["C1"].Value = "Phone Error";
resultsSheet ["D1"].Value = "Email Error";
resultsSheet ["E1"].Value = "Date Error";
for (var i = 0; i < results.Count; i++)
{
    var result = results [i];
    resultsSheet [$"A{i + 2}"].Value = result.Row;
    resultsSheet [$"B{i + 2}"].Value = result.IsValid ? "Yes" : "No";
    resultsSheet [$"C{i + 2}"].Value = result.PhoneNumberErrorMessage;
    resultsSheet [$"D{i + 2}"].Value = result.EmailErrorMessage;
    resultsSheet [$"E{i + 2}"].Value = result.DateErrorMessage;
}
workbook.SaveAs(@"Spreadsheets\\PeopleValidated.xlsx");Dim resultsSheet = workbook.CreateWorkSheet("Results")
resultsSheet ("A1").Value = "Row"
resultsSheet ("B1").Value = "Valid"
resultsSheet ("C1").Value = "Phone Error"
resultsSheet ("D1").Value = "Email Error"
resultsSheet ("E1").Value = "Date Error"
For i = 0 To results.Count - 1
	Dim result = results (i)
	resultsSheet ($"A{i + 2}").Value = result.Row
	resultsSheet ($"B{i + 2}").Value = If(result.IsValid, "Yes", "No")
	resultsSheet ($"C{i + 2}").Value = result.PhoneNumberErrorMessage
	resultsSheet ($"D{i + 2}").Value = result.EmailErrorMessage
	resultsSheet ($"E{i + 2}").Value = result.DateErrorMessage
Next i
workbook.SaveAs("Spreadsheets\\PeopleValidated.xlsx")Entity Frameworkを使用してデータをエクスポート
IronXLを使用して、Excelスプレッドシートをデータベースに変換したり、データをデータベースにエクスポートしたりできます。 ExcelToDBのサンプルは、各国のGDPが記載されたスプレッドシートを読み取り、それをSQLiteにエクスポートします。
それはEntityFrameworkを使用してデータベースを作成し、その後、データを行ごとにエクスポートします。
SQLite Entity Framework NuGetパッケージをインストールする必要があります。
 
    EntityFrameworkを使用して、データベースにデータをエクスポートできるモデルオブジェクトを構築できます。
public class Country
{
    [Key]
    public Guid Key { get; set; }
    public string Name { get; set; }
    public decimal GDP { get; set; }
}public class Country
{
    [Key]
    public Guid Key { get; set; }
    public string Name { get; set; }
    public decimal GDP { get; set; }
}Public Class Country
	<Key>
	Public Property Key() As Guid
	Public Property Name() As String
	Public Property GDP() As Decimal
End Class別のデータベースを使用するには、適切なNuGetパッケージをインストールし、UseSqLiteに相当するものを探してください ()。
/**
Export Data using Entity Framework
anchor-export-data-using-entity-framework
**/
public class CountryContext : DbContext
{
    public DbSet<Country> Countries { get; set; }
    public CountryContext()
    {
        //TODO: Make async
        Database.EnsureCreated();
    }
    /// <summary>
    /// Configure context to use Sqlite
    /// </summary>
    /// <param name="optionsBuilder"></param>
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connection = new SqliteConnection($"Data Source=Country.db");
        connection.Open();
        var command = connection.CreateCommand();
        //Create the database if it doesn't already exist
        command.CommandText = $"PRAGMA foreign_keys = ON;";
        command.ExecuteNonQuery();
        optionsBuilder.UseSqlite(connection);
        base.OnConfiguring(optionsBuilder);
    }
}/**
Export Data using Entity Framework
anchor-export-data-using-entity-framework
**/
public class CountryContext : DbContext
{
    public DbSet<Country> Countries { get; set; }
    public CountryContext()
    {
        //TODO: Make async
        Database.EnsureCreated();
    }
    /// <summary>
    /// Configure context to use Sqlite
    /// </summary>
    /// <param name="optionsBuilder"></param>
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connection = new SqliteConnection($"Data Source=Country.db");
        connection.Open();
        var command = connection.CreateCommand();
        //Create the database if it doesn't already exist
        command.CommandText = $"PRAGMA foreign_keys = ON;";
        command.ExecuteNonQuery();
        optionsBuilder.UseSqlite(connection);
        base.OnConfiguring(optionsBuilder);
    }
}'''
'''Export Data using Entity Framework
'''anchor-export-data-using-entity-framework
'''*
Public Class CountryContext
	Inherits DbContext
	Public Property Countries() As DbSet(Of Country)
	Public Sub New()
		'TODO: Make async
		Database.EnsureCreated()
	End Sub
	''' <summary>
	''' Configure context to use Sqlite
	''' </summary>
	''' <param name="optionsBuilder"></param>
	Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder)
		Dim connection = New SqliteConnection($"Data Source=Country.db")
		connection.Open()
		Dim command = connection.CreateCommand()
		'Create the database if it doesn't already exist
		command.CommandText = $"PRAGMA foreign_keys = ON;"
		command.ExecuteNonQuery()
		optionsBuilder.UseSqlite(connection)
		MyBase.OnConfiguring(optionsBuilder)
	End Sub
End ClassCountryContextを生成し、その後、範囲を反復して各エントリを作成し、SaveAsyncでデータベースに保存します。
public async Task ProcessAsync()
{
    //Get the first worksheet
    var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
    var worksheet = workbook.GetWorkSheet("GDPByCountry");
    //Create the database connection
    using (var countryContext = new CountryContext())
    {
        //Iterate through all the cells
        for (var i = 2; i <= 213; i++)
        {
            //Get the range from A-B
            var range = worksheet [$"A{i}:B{i}"].ToList();
            //Create a Country entity to be saved to the database
            var country = new Country
            {
                Name = (string)range [0].Value,
                GDP = (decimal)(double)range [1].Value
            };
            //Add the entity 
            await countryContext.Countries.AddAsync(country);
        }
        //Commit changes to the database
        await countryContext.SaveChangesAsync();
    }
}public async Task ProcessAsync()
{
    //Get the first worksheet
    var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
    var worksheet = workbook.GetWorkSheet("GDPByCountry");
    //Create the database connection
    using (var countryContext = new CountryContext())
    {
        //Iterate through all the cells
        for (var i = 2; i <= 213; i++)
        {
            //Get the range from A-B
            var range = worksheet [$"A{i}:B{i}"].ToList();
            //Create a Country entity to be saved to the database
            var country = new Country
            {
                Name = (string)range [0].Value,
                GDP = (decimal)(double)range [1].Value
            };
            //Add the entity 
            await countryContext.Countries.AddAsync(country);
        }
        //Commit changes to the database
        await countryContext.SaveChangesAsync();
    }
}Public Async Function ProcessAsync() As Task
	'Get the first worksheet
	Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
	Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
	'Create the database connection
	Using countryContext As New CountryContext()
		'Iterate through all the cells
		For i = 2 To 213
			'Get the range from A-B
			Dim range = worksheet ($"A{i}:B{i}").ToList()
			'Create a Country entity to be saved to the database
			Dim country As New Country With {
				.Name = CStr(range (0).Value),
				.GDP = CDec(CDbl(range (1).Value))
			}
			'Add the entity 
			Await countryContext.Countries.AddAsync(country)
		Next i
		'Commit changes to the database
		Await countryContext.SaveChangesAsync()
	End Using
End Functionスプレッドシートに数式を組み込む
Formulaプロパティを使用してセルの数式を設定することができます。
//Iterate through all rows with a value
for (var y = 2; y < i; y++)
{
    //Get the C cell
    var cell = sheet [$"C{y}"].First();
    //Set the formula for the Percentage of Total column
    cell.Formula = $"=B{y}/B{i}";
}//Iterate through all rows with a value
for (var y = 2; y < i; y++)
{
    //Get the C cell
    var cell = sheet [$"C{y}"].First();
    //Set the formula for the Percentage of Total column
    cell.Formula = $"=B{y}/B{i}";
}'Iterate through all rows with a value
Dim y = 2
Do While y < i
	'Get the C cell
	Dim cell = sheet ($"C{y}").First()
	'Set the formula for the Percentage of Total column
	cell.Formula = $"=B{y}/B{i}"
	y += 1
Loop列Cのコードは各州を繰り返し処理し、パーセンテージの総計を計算します。
APIからのデータはスプレッドシートにダウンロードできます
RestClient.Netは以下の呼び出しでREST呼び出しを行うために使用されます。 JSONをダウンロードしてRestCountry型の「リスト」に変換します。REST APIからのデータは、各国を順番に処理することで簡単にExcelファイルに保存できます。
/**
Data API to Spreadsheet
anchor-download-data-from-an-api-to-spreadsheet
**/
var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();/**
Data API to Spreadsheet
anchor-download-data-from-an-api-to-spreadsheet
**/
var client = new Client(new Uri("https://restcountries.eu/rest/v2/"));
List<RestCountry> countries = await client.GetAsync<List<RestCountry>>();'''
'''Data API to Spreadsheet
'''anchor-download-data-from-an-api-to-spreadsheet
'''*
Dim client As New Client(New Uri("https://restcountries.eu/rest/v2/"))
Dim countries As List(Of RestCountry) = Await client.GetAsync(Of List(Of RestCountry))()APIから取得したJSONデータは次のようになります:
 
    以下のコードは国々をループして、名前、人口、地域、NumericCode、そして上位3つの言語でスプレッドシートを埋めます。
for (var i = 2; i < countries.Count; i++)
{
    var country = countries [i];
    //Set the basic values
    worksheet [$"A{i}"].Value = country.name;
    worksheet [$"B{i}"].Value = country.population;
    worksheet [$"G{i}"].Value = country.region;
    worksheet [$"H{i}"].Value = country.numericCode;
    //Iterate through languages
    for (var x = 0; x < 3; x++)
    {
        if (x > (country.languages.Count - 1)) break;
        var language = country.languages [x];
        //Get the letter for the column
        var columnLetter = GetColumnLetter(4 + x);
        //Set the language name
        worksheet [$"{columnLetter}{i}"].Value = language.name;
    }
}for (var i = 2; i < countries.Count; i++)
{
    var country = countries [i];
    //Set the basic values
    worksheet [$"A{i}"].Value = country.name;
    worksheet [$"B{i}"].Value = country.population;
    worksheet [$"G{i}"].Value = country.region;
    worksheet [$"H{i}"].Value = country.numericCode;
    //Iterate through languages
    for (var x = 0; x < 3; x++)
    {
        if (x > (country.languages.Count - 1)) break;
        var language = country.languages [x];
        //Get the letter for the column
        var columnLetter = GetColumnLetter(4 + x);
        //Set the language name
        worksheet [$"{columnLetter}{i}"].Value = language.name;
    }
}For i = 2 To countries.Count - 1
	Dim country = countries (i)
	'Set the basic values
	worksheet ($"A{i}").Value = country.name
	worksheet ($"B{i}").Value = country.population
	worksheet ($"G{i}").Value = country.region
	worksheet ($"H{i}").Value = country.numericCode
	'Iterate through languages
	For x = 0 To 2
		If x > (country.languages.Count - 1) Then
			Exit For
		End If
		Dim language = country.languages (x)
		'Get the letter for the column
		Dim columnLetter = GetColumnLetter(4 + x)
		'Set the language name
		worksheet ($"{columnLetter}{i}").Value = language.name
	Next x
Next iIronXLでExcelファイルを開く
Excelファイルを起動した後、最初のシートの1番目のセルを読み取り、印刷するための最初の数行を追加します。
static void Main(string [] args)
{
    var workbook = IronXL.WorkBook.Load($@"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx");
    var sheet = workbook.WorkSheets.First();
    var cell = sheet ["A1"].StringValue;
    Console.WriteLine(cell);
}static void Main(string [] args)
{
    var workbook = IronXL.WorkBook.Load($@"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx");
    var sheet = workbook.WorkSheets.First();
    var cell = sheet ["A1"].StringValue;
    Console.WriteLine(cell);
}Shared Sub Main(ByVal args() As String)
	Dim workbook = IronXL.WorkBook.Load($"{Directory.GetCurrentDirectory()}\Files\HelloWorld.xlsx")
	Dim sheet = workbook.WorkSheets.First()
	Dim cell = sheet ("A1").StringValue
	Console.WriteLine(cell)
End SubIronXLを使用して、新しいExcelファイルを作成します。
/**
Create Excel File
anchor-create-a-new-excel-file
**/
static void Main(string [] args)
{
    var newXLFile = WorkBook.Create(ExcelFileFormat.XLSX);
    newXLFile.Metadata.Title = "IronXL New File";
    var newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet");
    newWorkSheet ["A1"].Value = "Hello World";
    newWorkSheet ["A2"].Style.BottomBorder.SetColor("#ff6600");
    newWorkSheet ["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Dashed;
}/**
Create Excel File
anchor-create-a-new-excel-file
**/
static void Main(string [] args)
{
    var newXLFile = WorkBook.Create(ExcelFileFormat.XLSX);
    newXLFile.Metadata.Title = "IronXL New File";
    var newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet");
    newWorkSheet ["A1"].Value = "Hello World";
    newWorkSheet ["A2"].Style.BottomBorder.SetColor("#ff6600");
    newWorkSheet ["A2"].Style.BottomBorder.Type = IronXL.Styles.BorderType.Dashed;
}'''
'''Create Excel File
'''anchor-create-a-new-excel-file
'''*
Shared Sub Main(ByVal args() As String)
	Dim newXLFile = WorkBook.Create(ExcelFileFormat.XLSX)
	newXLFile.Metadata.Title = "IronXL New File"
	Dim newWorkSheet = newXLFile.CreateWorkSheet("1stWorkSheet")
	newWorkSheet ("A1").Value = "Hello World"
	newWorkSheet ("A2").Style.BottomBorder.SetColor("#ff6600")
	newWorkSheet ("A2").Style.BottomBorder.Type = IronXL.Styles.BorderType.Dashed
End Subこれに続いて、それぞれのコードを使用してCSV、JSON、またはXMLとして保存できます。
例えば、XML “.xml” に保存する場合
XMLに保存するには、以下のようにSaveAsXmlを使用してください:
newXLFile.SaveAsXml($@"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML");newXLFile.SaveAsXml($@"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML");newXLFile.SaveAsXml($"{Directory.GetCurrentDirectory()}\Files\HelloWorldXML.XML")結果は次のようになります。
<?xml version="1.0" standalone="yes"?>
<_x0031_stWorkSheet>
  <_x0031_stWorkSheet>
    <Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Hello World</Column1>
  </_x0031_stWorkSheet>
  <_x0031_stWorkSheet>
    <Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </_x0031_stWorkSheet>
</_x0031_stWorkSheet><?xml version="1.0" standalone="yes"?>
<_x0031_stWorkSheet>
  <_x0031_stWorkSheet>
    <Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Hello World</Column1>
  </_x0031_stWorkSheet>
  <_x0031_stWorkSheet>
    <Column1 xsi:type="xs:string" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
  </_x0031_stWorkSheet>
</_x0031_stWorkSheet>Excelファイルを読み取るには、EPPlusよりもIronXLの方が簡単です。 IronXLには、ブック内のすべての列、行、およびセルにアクセスするために必要なすべてを含むより短くなったコードがありますが、EPPlusでは列と行を読み取るために具体的なコード行が必要です。
IronXLは、Excelドキュメントの操作においてより賢明です。 任意の時点でより多くのシートを作成することが可能であり、複数のワークシートやワークブックからデータを読み取ることができます。一方、EPPlusは1枚のワークシートのみを扱います。IronXLを使用すると、Excelワークブックのデータをデータベースに入力することもできます。
EPPlusは、非商用ライセンスモデルまたはPolyformの商用ライセンスモデルのいずれかのライセンスモデルで使用できます。
商用ライセンス
これらは永続ライセンスとサブスクリプションベースの形式の両方で利用可能で、契約期間は1か月から2年間です。
すべてのライセンスカテゴリにおいて、ライセンス期間中はサポートセンター経由でのサポートとNuGet経由でのアップグレードが含まれます。
EPPlusは、開発者ごとに1つのライセンスが必要です。 ライセンスは個人に対して発行され、共有することはできません。 一般的なガイドラインとして、EPPlusを直接利用するコードを作成またはデバッグする必要がある人は、商用ライセンスを取得する必要があります。
EPPlusを社内でサービスとして提供する場合(例えば、APIを介してその機能を公開する場合)、サービスを利用する社内のユーザー(開発者)の数をカバーするサブスクリプションを貴社は購入する必要があります。
サブスクリプション
サブスクリプションを利用すれば常に最新バージョンを使用できますが、開発にEPPlusを使用する限り、有効なライセンスを持っている必要があります。 ライセンス期間の終了時に、支払いが完了すると自動的に請求および更新されます。 ライセンス期間の終了時にサブスクリプションをキャンセルし、必要なときに新しいサブスクリプションを開始することができます。サブスクリプションはインターネットのみで購入可能です。
EPPlusは商業環境で使用できます。 ライセンスは1社あたり1人の開発者用で、デプロイ場所の数は無制限です。 ライセンスの購入可能数は毎年増減させることができ、ライセンスは各年の終了時に一時停止またはキャンセルすることができます。
32日間の試用期間を選択できます。
価格: 年間$299から開始。
利用した分だけ支払うことができます
単一の組織内の開発者ごとの価格、無制限のデプロイメント場所を対象とし、Stripe請求書を使用します。 毎月利用可能なライセンスの数は増加または減少させることができ、ライセンスは各月の終わりに一時停止またはキャンセルすることができます。
価格: 月額29ドルから。
永久ライセンス
永続ライセンスは、新しいバージョンへの更新および一定期間のサポートを受けることができます。その後も、この期間にリリースされたバージョンを使用してソフトウェアの開発を続けることができ、ライセンスの更新は不要です。
同じ企業内では、無制限のデプロイメントサイトを持つ開発者一人当たりの価格。 サポート/アップグレード期間内にリリースされたすべてのEPPlusバージョンの無期限使用。
32日間の試用期間を選択できます。
価格:年額599ドルから。
パッケージ
初期期間のアップグレードおよびサポートが付随する永久ライセンスオプションが利用可能です。 この期間中にリリースされたバージョンを使用してソフトウェアを開発し続けることができ、ライセンスを更新する必要はありません。
価格: 年間$4295から。
Polyformの非商用ライセンス
EPPlusはバージョン5からPolyform Noncommercialライセンスの下でライセンスされています。これは、コードがオープンソースであり、非商業的な用途で使用できることを示しています。 詳細については、彼らのウェブサイトをご覧ください。
永続ライセンス: 各ライセンスは一度購入され、更新の必要はありません。
無償サポートと製品の更新: 全てのライセンスには、製品の更新と製品を担当するチームからのサポートが1年間無償で提供されます。 拡張機能をいつでも購入することが可能です。 拡張機能を表示できます。
即時ライセンス: 支払いが完了すると、登録ライセンスキーがすぐに送信されます。
IronXL for .NET のライセンスに関する質問がございましたら、Iron Software のライセンススペシャリストにお問い合わせください。
すべてのライセンスは永続的であり、開発、ステージング、および運用に適用されます。
Lite - 組織内の単一のソフトウェア開発者が一か所でIron Softwareを利用できるようにします。 Iron Softwareは、単一のWebアプリケーション、イントラネットアプリケーション、またはデスクトップソフトウェアプログラムで使用できます。 ライセンスは譲渡不可であり、組織外または代理店/クライアントの関係外で共有することはできません。このライセンスタイプは、他のすべてのライセンスタイプと同様に、OEMの再配布や追加のカバレッジを購入しない限りIron SoftwareをSaaSとして利用することを含む、合意書に明示的に付与されていないすべての権利を明示的に除外します。
価格:年額489ドルから。
Professional License - 1 つの場所で最大 10 人までの決められた数のソフトウェア開発者が、Iron Software を利用できるようにします。 Iron Softwareは、任意の数のウェブサイト、イントラネットアプリケーション、またはデスクトップソフトウェアアプリケーションに使用できます。ライセンスは譲渡不可能であり、組織外またはエージェンシー/クライアント関係を越えて共有することはできません。このライセンスタイプは、他のすべてのライセンスタイプと同様に、OEM再配布および追加のカバレッジを購入することなくIron SoftwareをSaaSとして利用することを含む、契約に明示的に規定されていないすべての権利を明示的に除外します。
価格: 年間976ドルから始まります。
Unlimited License - 組織内の無制限の数のソフトウェア開発者が、無制限の数の拠点でIron Softwareを利用することを許可します。 Iron Softwareは、任意の数のウェブサイト、イントラネットアプリケーション、またはデスクトップソフトウェアアプリケーションに使用できます。ライセンスは譲渡不可能であり、組織外またはエージェンシー/クライアント関係を越えて共有することはできません。このライセンスタイプは、他のすべてのライセンスタイプと同様に、OEM再配布および追加のカバレッジを購入することなくIron SoftwareをSaaSとして利用することを含む、契約に明示的に規定されていないすべての権利を明示的に除外します。
ロイヤルティフリー再配布 - ベースライセンスでカバーされるプロジェクトの数に基づいて、Iron Software を複数の異なる商用製品パッケージの一部として(ロイヤルティを支払うことなく)配布することができます。 基本ライセンスでカバーされるプロジェクト数に基づき、SaaSソフトウェアサービス内でのIron Softwareの展開を可能にします。
価格:年額$2939から開始。
結論として、IronXLはEPPlusよりも実用的です。なぜなら、Excelテーブルを必要に応じてナビゲートする柔軟性があり、コード行数が少なく、XML、HTML、JSONなどへのエクスポートの機会が多いからです。 IronXL を使用すると、ワークブックのデータをデータベースに統合することもできます。 さらに、ドキュメントが編集されるたびに数式を再計算する直感的なシステムを備えており、ワークシート [“A1:B10”] の構文で直感的な範囲設定を提供します。 シートの機能には、Excelと連携する数式が含まれ、シートが編集されるたびに再計算されます。 セルデータ形式には、複数のテキスト、数値、数式、日付、通貨、パーセンテージ、科学表記、時間があります。カスタム形式は、範囲、列、行などの異なる並べ替え方法を持っています。 セルスタイリングには、さまざまなフォント、サイズ、背景パターン、境界線、配置が含まれています。