他のコンポーネントと比較

IronXLとEpplusの比較

更新済み 3月 23, 2022
共有:

この記事では、IronXLソフトウェアとEPPlusソフトウェアの類似点と相違点について検討します。

ほとんどの組織にとって、Microsoft Excel は非常に有用なツールであることが証明されています。 Excelファイルは、データベースなどの形式でセルにデータを含んでおり、非常に簡単にデータを管理し保存することができます。

.xlsおよび.xlsxファイル形式は、Excelでも使用されます。 C#言語では、Excelファイルの管理が難しいことがあります。 しかし、IronXLおよびEPPlusソフトウェアはこれらのプロセスをより簡単に処理できます。

このソフトウェアを使用する際にMicrosoft Officeは必要ありません。

C#でExcelファイルを読み書きする際に、Microsoft Officeをインストールする必要はありません。 今日は、簡単に実装できるいくつかの異なるオプションを見てみましょう。

EPPlusソフトウェアとは何ですか?

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のインストール

EPPlusをVisual Studioにインストールするには、[表示] > [その他のウィンドウ] > [パッケージ マネージャー コンソール]に移動し、次のコマンドを入力してください:

PM> Install-Package EPPlus

.NET CLIを利用したい場合は、管理者権限のコマンドプロンプトまたはPowerShellプロンプトから以下のコマンドを実行してください:

PM> dotnet add package EPPlus

EPPlusは、プロジェクトに追加できるドットネットパッケージです。

IronXLとは何ですか?

IronXLは、シンプルなC#およびVBのExcel APIで、.NET環境でExcelスプレッドシートファイルを高速に読み取り、編集、作成することができます。 Microsoft OfficeやExcel Interopをインストールする必要はありません。このライブラリはExcelファイルを取り扱うためにも使用できます。

IronXLは、.NET Core、.NET Framework、Xamarin、モバイル、Linux、macOS、およびAzureをすべてサポートしています。

スプレッドシートにデータを読み書きするには、さまざまな方法があります。

NuGetパッケージを使用したIronXLの追加

IronXLパッケージをアカウントに追加する方法は3つありますので、最適な方法を選択することができます。

  • パッケージマネージャーコンソールを使用してIronXLをインストールする

    プロジェクト内のパッケージ マネージャー コンソールを開くには、次のコマンドを使用してください:

    パッケージ マネージャー コンソールにアクセスするには、ツール => NuGet パッケージ マネージャー => パッケージ マネージャー コンソールに移動します。

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

PM > Install-Package IronXL.Excel

  • NuGet パッケージ マネージャーを使用して IronXL をインストールする方法

    これは、NuGetパッケージマネージャーをインストールするための異なるアプローチです。 以前の方法でインストールを完了している場合、このアプローチを利用する必要はありません。

    NuGet パッケージ マネージャーにアクセスするには、[ツール] > [NuGet パッケージ マネージャー] => ドロップダウン メニューから [ソリューションの NuGet パッケージの管理] を選択します。

    これはNuGetソリューションを起動します。 「参照」を選択し、IronXL を探します。

    検索バーに「Excel」と入力します。

    「インストール」ボタンをクリックすると、IronXLがインストールされます。 IronXLをインストールした後、フォームに移動して開発を開始できます。

IronXLを使用してExcelファイルを作成する

IronXLを使って新しいExcelワークブックを作成するのはとても簡単です。! それはたった1行のコードです! はい、これは本当です。

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
VB   C#

IronXLはXLS形式のファイルを作成することができます。 (以前のExcelファイルバージョン) およびXLSX (現在および新しいExcelファイルバージョン) 形式

  • 既定のワークシートを設定する

    デフォルトのワークシートを設定するのはさらに簡単です。

    ワークブックからシートを作成するコードは次の通りです:

var sheet = workbook.CreateWorkSheet();
```(「2020年予算」);

 上記のコードスニペットではワークシートは "Sheet" で表されており、それを使用してセルの値を設定し、Excelができるほとんどすべての操作を行うことができます。 Excelドキュメントを読み取り専用ファイルとしてコード化し、削除操作を実行することもできます。 Excel のように、ワークシートをリンクすることもできます。

 ワークブックとワークシートの違いを明確にしましょう。ご不明の場合に備えて。

 ワークシートはワークブックに含まれています。 これは、ワークブックに好きなだけ多くのワークシートを入れることができるということです。 後の記事でこれを行う方法について説明します。 行と列でワークシートが構成されています。 行と列の交差点はセルと呼ばれ、これがExcelで対話する部分です。

## Epplus Software ABを使用してExcelファイルを作成する

EPPlusは、Excelファイルの作成や、ピボットテーブル、ピボットエリアの作成、さらには条件付き書式設定やフォントの変更などの操作を行うために使用できます。 それでは、通常のDataTableをXLSX形式のExcelファイルに変換し、ユーザーにダウンロードさせるための全ソースコードを以下に示します:

```cs
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);
}
var sheet = workbook.CreateWorkSheet();
```(「2020年予算」);

 上記のコードスニペットではワークシートは "Sheet" で表されており、それを使用してセルの値を設定し、Excelができるほとんどすべての操作を行うことができます。 Excelドキュメントを読み取り専用ファイルとしてコード化し、削除操作を実行することもできます。 Excel のように、ワークシートをリンクすることもできます。

 ワークブックとワークシートの違いを明確にしましょう。ご不明の場合に備えて。

 ワークシートはワークブックに含まれています。 これは、ワークブックに好きなだけ多くのワークシートを入れることができるということです。 後の記事でこれを行う方法について説明します。 行と列でワークシートが構成されています。 行と列の交差点はセルと呼ばれ、これがExcelで対話する部分です。

## Epplus Software ABを使用してExcelファイルを作成する

EPPlusは、Excelファイルの作成や、ピボットテーブル、ピボットエリアの作成、さらには条件付き書式設定やフォントの変更などの操作を行うために使用できます。 それでは、通常のDataTableをXLSX形式のExcelファイルに変換し、ユーザーにダウンロードさせるための全ソースコードを以下に示します:

```cs
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);
}
Dim sheet = workbook.CreateWorkSheet()
```(「2020年予算」)

## Epplus Software ABを使用してExcelファイルを作成する
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' 上記のコードスニペットではワークシートは "Sheet" で表されており、それを使用してセルの値を設定し、Excelができるほとんどすべての操作を行うことができます。 Excelドキュメントを読み取り専用ファイルとしてコード化し、削除操作を実行することもできます。 Excel のように、ワークシートをリンクすることもできます。 ワークブックとワークシートの違いを明確にしましょう。ご不明の場合に備えて。 ワークシートはワークブックに含まれています。 これは、ワークブックに好きなだけ多くのワークシートを入れることができるということです。 後の記事でこれを行う方法について説明します。 行と列でワークシートが構成されています。 行と列の交差点はセルと呼ばれ、これがExcelで対話する部分です。 EPPlusは、Excelファイルの作成や、ピボットテーブル、ピボットエリアの作成、さらには条件付き書式設定やフォントの変更などの操作を行うために使用できます。 それでは、通常のDataTableをXLSX形式のExcelファイルに変換し、ユーザーにダウンロードさせるための全ソースコードを以下に示します: ```cs public ActionResult ConvertToXLSX()
'{
'	byte [] fileData = Nothing;
'
'	' 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);
'}
VB   C#

ご覧のように、これは任意のASP.NET MVCコントローラーで使用できるActionResultメソッドです。 ASP.NET MVCを使用していない場合は、メソッドの内容をコピーして必要な場所に貼り付けてください。 (クラシックASP.NET、コンソールアプリケーション、Windowsフォームなど).

コードは自己説明的であり、さまざまな処理プロセスを理解するための十分なコメントが付いています。 まずは、ここで何をしているのか簡単におさらいしましょう:

  • カスタムデータプロバイダーメソッドを使用して、DataTableオブジェクトを取得します。
  • 私たちはExcelPackageオブジェクトを構築します。これは、EPPlusのXLSXファイルの主要なコンテナです。
  • エクセルパッケージにExcelWorksheetを追加します。これがデータが入力されるワークシートとなります。
  • ヘッダー行を作成するために、DataTableの列を反復処理し、それらをワークシートの最初の行に追加します。
  • データテーブルの行を反復して、それぞれの行を順にワークシートに追加します。 (行2から始める) 各DataTable行がワークシート行に対応するようにします。
  • DataTableからExcelPackageへの変換が完了したら、ExcelPackageのバイナリデータを格納するためのMemoryStreamを構築し、それをバイト配列に変換します。

  • HTMLの回答を作成し、Content-Disposition添付ファイルとしてXLSXファイルをユーザーに送信し、ブラウザが自動的にファイルをダウンロードするようにします。

    この場合、IronXL が勝利する理由は、作成プロセスが非常に簡単だからです。一行のコードだけで開始できます。 これにより、時間を節約しデバッグが簡単になります。一方、EPPlusは確認するのが退屈でデバッグが難しいコード行を提供します。

EPPlus Software ABがExcelファイルを作成する方法

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
VB   C#

以下は、サンプルのエクセルファイルを使用したコンソールアプリケーションの出力例です。 (.xlsx) 私たちが扱っているもの。 以下は、EPPlusを使用してC#で読み取るためのxlsxファイルです。

以下のさまざまなソースからデータをロードする方法は、「cells」プロパティを使用してアクセスできます。 (ExcelRange (エクセルレンジ)):

  • テキストファイルからCSVを読み取り、データをワークシートの範囲にロードするには、LoadFromText および LoadFromTextAsync を使用します。

    • データリーダーからフィールドをレンジにロードするメソッドに関する説明です:

LoadFromDataReaderAsyncおよびLoadFromDataReader— DataReaderからデータフィールドを範囲にロードします。

  • LoadFromDataTable — DataTableからデータを範囲に読み込みます。 さまざまなソースからデータをインポートすることが可能です。例えば、XMLを含む (以下の日本語に翻訳します:

例が提供されています) およびデータベース。

  • LoadFromCollection — IEnumerableからデータを範囲内に反映的にロードします。
  • 属性付きのLoadFromCollection — IEnumerableから範囲またはテーブルに反射的にデータをロードします。 スタイル、数値形式、数式、およびその他のプロパティは属性を介して指定されます。
  • LoadFromDictionaries — IEnumerableのExpandoObject/動的オブジェクトからデータをロードします (IDictionary<string, object> インターフェースを通じて) 範囲に。 これはJSONデータのインポートに役立ち、例が含まれています。
  • 配列から読み込む — オブジェクトのIEnumeratorからデータを読み込みます。 [] ワークシートの各行に対応する各オブジェクト配列を範囲に変換します。

    これらのメソッドを使用する際に、オプションとして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"
	}
}
VB   C#

新しい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
VB   C#

上記のAPIコールでデータ検証を行った後、前述のカスタムオブジェクトを適切なExcelの列と行に変換して、新しいExcelファイルが作成され、以下の値が表示されます。

上記のすぐに使用できるAPIは、.NET Coreコンソール、テストプロジェクト、またはASP.NET Coreアプリケーションで使用でき、ニーズに合わせてロジックを変更することができます。

これらの技術は「cells」プロパティを使用してアクセスできます。 (ExcelRange (エクセルレンジ)):

  • ToTextおよびToTextAsync — 範囲からCSV文字列を生成します。
  • SaveToTextおよびSaveToTextAsyncを使用して範囲をCSVファイルに書き込む。
  • 範囲からシステムにデータをエクスポートするには、ToDataTableメソッドを使用します。 データテーブル
  • GetValue — データ型のオプションを伴った値を表示します。

  • 値 — 範囲の値を返すか設定します。

    次の GetValue メソッドおよび SetValue メソッドは、ワークシート オブジェクトに直接使用することもできます。 (これにより、範囲内での読み書きよりもわずかに良い結果が得られます。):

  • GetValueT> — データ型の指定オプション付きで、単一セルの値を取得します。
  • SetValue — 単一のセルの値を変更します。

    Linqは、セルプロパティがIEnumerableインターフェイスを実装しているため、ワークシートからデータをクエリするために使用できます。

IronXLを使用してOffice Open XML形式のXLSXファイルを開くおよび書き込む

IronXLは、C#開発者がExcel、ピボットテーブル、その他のスプレッドシートファイルを迅速かつ簡単に操作できるようにする.NETライブラリです。

Office Interopは不要です。 CoreやAzureでは、特定の依存関係やMicrosoft Officeのインストールは必要ありません。

IronXLは、.NET Coreおよび.NET Framework向けの有名なC#およびVB.NET用のxlスプレッドシートライブラリです。

  • Excelファイルの読み取り
  • ロードするワークシート

    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")
VB   C#

WorkSheetオブジェクトは多数のWorkBookに見られます。 これらはExcelドキュメントのワークシートです。 シートにワークシートが含まれている場合は、「WorkBook」の名前を使用してそれらを見つけてください。 GetWorkSheet (ゲットワークシート)

var worksheet = workbook.GetWorkSheet("GDPByCountry");
var worksheet = workbook.GetWorkSheet("GDPByCountry");
Dim worksheet = workbook.GetWorkSheet("GDPByCountry")
VB   C#
  • 自分のワークブックを作成しましょう。

    シートタイプを使用してメモリ内に新しい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)
VB   C#

ビンテージのMicrosoft Excelスプレッドシートの場合、ExcelFileFormat.XLSを使用してください。 (95およびそれ以前).

まだ WorkSheet を持っていない場合は作成してください。

各「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")
VB   C#

CreateWorkSheet にワークシートの名前を渡します。

セル範囲を取得する

「Range」クラスは、「Cell」オブジェクトの二次元コレクションを表しています。 それは特定の範囲のExcelセルを示します。 WorkSheetオブジェクトの文字列インデクサーを使用して、範囲を取得することができます。

var range = worksheet ["D2:D101"];
var range = worksheet ["D2:D101"];
Dim range = worksheet ("D2:D101")
VB   C#

引数テキストはセルの座標である場合があります (例えば、「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
VB   C#

スプレッドシート内のデータを検証する

データシートを検証するには、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
VB   C#

上記のコードはスプレッドシートの行をループし、セルをリストとして取得します。各検証されたメソッドはセルの値を確認し、その値が正しくない場合にエラーを返します。

このコードは新しいシートを作成し、ヘッダーを指定し、不正なデータログを保持するためにエラーメッセージの結果を生成します。

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")
VB   C#

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
VB   C#

別のデータベースを使用するには、適切な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 Class
VB   C#

CountryContextを生成し、その後、範囲を反復して各エントリを作成し、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
VB   C#

数式をスプレッドシートに組み込む

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
VB   C#

列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))()
VB   C#

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 i
VB   C#

IronXLで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 Sub
VB   C#

IronXLを使用して、新しい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
VB   C#

これに続いて、それぞれのコードを使用して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")
VB   C#

結果は次のようになります。

<?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

Excelファイルを読み取るには、EPPlusよりもIronXLの方が簡単です。 IronXLには、ブック内のすべての列、行、およびセルにアクセスするために必要なすべてを含むより短くなったコードがありますが、EPPlusでは列と行を読み取るために具体的なコード行が必要です。

IronXLは、Excelドキュメントの操作においてより賢明です。 任意の時点でより多くのシートを作成することが可能であり、複数のワークシートやワークブックからデータを読み取ることができます。一方、EPPlusは1枚のワークシートのみを扱います。IronXLを使用すると、Excelワークブックのデータをデータベースに入力することもできます。

EPPlusとIronXLのライセンスおよび価格設定

EPPlusライセンスモデルと価格

EPPlusは、非商用ライセンスモデルまたはPolyformの商用ライセンスモデルのいずれかのライセンスモデルで使用できます。

商用ライセンス

これらは永続ライセンスとサブスクリプションベースの形式の両方で利用可能で、契約期間は1か月から2年間です。

すべてのライセンスカテゴリにおいて、ライセンス期間中はサポートセンター経由でのサポートとNuGet経由でのアップグレードが含まれます。

EPPlusは、開発者ごとに1つのライセンスが必要です。 ライセンスは個人に対して発行され、共有することはできません。 一般的なガイドラインとして、EPPlusを直接利用するコードを作成またはデバッグする必要がある人は、商用ライセンスを取得する必要があります。

内部でEPPlusをサービスとして提供する場合 (たとえば、APIを通じてその機能を公開することによって)、貴社は内部ユーザー数をカバーするサブスクリプションを購入する必要があります (開発者) サービスを利用する方。

購読

サブスクリプションを利用すれば常に最新バージョンを使用できますが、開発にEPPlusを使用する限り、有効なライセンスを持っている必要があります。 ライセンス期間の終了時に、支払いが完了すると自動的に請求および更新されます。 ライセンス期間の終了時にサブスクリプションをキャンセルし、必要なときに新しいサブスクリプションを開始することができます。サブスクリプションはインターネットのみで購入可能です。

EPPlusは商業環境で使用できます。 ライセンスは1社あたり1人の開発者用で、デプロイ場所の数は無制限です。 ライセンスの購入可能数は毎年増減させることができ、ライセンスは各年の終了時に一時停止またはキャンセルすることができます。

32日間の試用期間を選択できます。

価格: 1年間$299から。

従量課金制をご利用いただけます

単一の組織内の開発者ごとの価格、無制限のデプロイメント場所を対象とし、Stripe請求書を使用します。 毎月利用可能なライセンスの数は増加または減少させることができ、ライセンスは各月の終わりに一時停止またはキャンセルすることができます。

価格: 月額29ドルから。

永久ライセンス

永続ライセンスは、新しいバージョンへの更新および一定期間のサポートを受けることができます。その後も、この期間にリリースされたバージョンを使用してソフトウェアの開発を続けることができ、ライセンスの更新は不要です。

同じ企業内では、無制限のデプロイメントサイトを持つ開発者一人当たりの価格。 サポート/アップグレード期間内にリリースされたすべてのEPPlusバージョンの無期限使用。

32日間の試用期間を選択できます。

価格: 年間$599から開始。

パッケージ

初期期間のアップグレードおよびサポートが付随する永久ライセンスオプションが利用可能です。 この期間中にリリースされたバージョンを使用してソフトウェアを開発し続けることができ、ライセンスを更新する必要はありません。

価格: 年間$4295から始まります。

ポリフォームの非商用ライセンス

EPPlusはバージョン5からPolyform Noncommercialライセンスの下でライセンスされています。これは、コードがオープンソースであり、非商業的な用途で使用できることを示しています。 詳細については、彼らのウェブサイトをご覧ください。

IronXLライセンスモデルと価格

永久ライセンス: 各ライセンスは一度購入すると、更新の必要はありません。

無償サポートと製品の更新: 全てのライセンスには、製品の更新と製品を担当するチームからのサポートが1年間無償で提供されます。 拡張機能をいつでも購入することが可能です。 拡張機能を表示できます。

即時ライセンス: 支払いが完了すると、登録ライセンスキーがすぐに送信されます。

IronXL for .NET のライセンスに関する質問がございましたら、Iron Software のライセンススペシャリストにお問い合わせください。

すべてのライセンスは永続的であり、開発、ステージング、および運用に適用されます。

Lite - 単一のソフトウェア開発者が組織内でIron Softwareを単一の場所で利用できるようにします。 Iron Softwareは、単一のWebアプリケーション、イントラネットアプリケーション、またはデスクトップソフトウェアプログラムで使用できます。 ライセンスは譲渡不可であり、組織外または代理店/クライアントの関係外で共有することはできません。このライセンスタイプは、他のすべてのライセンスタイプと同様に、OEMの再配布や追加のカバレッジを購入しない限りIron SoftwareをSaaSとして利用することを含む、合意書に明示的に付与されていないすべての権利を明示的に除外します。

価格: 年額489ドルから開始。

Professional License - 組織内の決められた数のソフトウェア開発者が単一の場所でIron Softwareを利用できるライセンスです。最大で10人まで利用可能です。 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 を使用すると、ワークブックのデータをデータベースに統合することもできます。 さらに、ドキュメントが編集されるたびに数式を再計算する直感的なシステムを備えており、WorkSheetとともに直感的な範囲設定を提供します。 ["A1:B10"] 構文。 シートの機能には、Excelと連携する数式が含まれ、シートが編集されるたびに再計算されます。 セルデータ形式には、複数のテキスト、数値、数式、日付、通貨、パーセンテージ、科学表記、時間があります。カスタム形式は、範囲、列、行などの異なる並べ替え方法を持っています。 セルスタイリングには、さまざまなフォント、サイズ、背景パターン、境界線、配置が含まれています。

< 以前
IronXLとAspose Cellsの比較
次へ >
IronXLとMicrosoft Office Interop Excelの比較

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 977,734 View Licenses >