ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
この記事では、IronXLソフトウェアとEPPlusソフトウェアの類似点と相違点について検討します。
ほとんどの組織にとって、Microsoft Excel は非常に有用なツールであることが証明されています。 Excelファイルは、データベースなどの形式でセルにデータを含んでおり、非常に簡単にデータを管理し保存することができます。
.xlsおよび.xlsxファイル形式は、Excelでも使用されます。 C#言語では、Excelファイルの管理が難しいことがあります。 しかし、IronXLおよびEPPlusソフトウェアはこれらのプロセスをより簡単に処理できます。
このソフトウェアを使用する際にMicrosoft Officeは必要ありません。
C#でExcelファイルを読み書きする際に、Microsoft Officeをインストールする必要はありません。 今日は、簡単に実装できるいくつかの異なるオプションを見てみましょう。
エクセルパッケージ
Excelファイルを読み取るためのEpplus C# クラスデータテーブルから読み込む
メソッド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 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);
'}
ご覧のように、これは任意の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
以下は、サンプルのエクセルファイルを使用したコンソールアプリケーションの出力例です。(.xlsx)私たちが扱っているもの。 以下は、EPPlusを使用してC#で読み取るためのxlsxファイルです。
以下のさまざまなソースからデータをロードする方法は、「cells」プロパティを使用してアクセスできます。(ExcelRange (エクセルレンジ)):
テキストファイルからCSVを読み取り、データをワークシートの範囲にロードするには、LoadFromText および LoadFromTextAsync を使用します。
LoadFromDataReaderAsyncおよびLoadFromDataReader— DataReaderからデータフィールドを範囲にロードします。
例が提供されています)およびデータベース。
配列から読み込む — オブジェクトの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"
}
}
新しい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およびそれ以前).
まだ 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")
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 Class
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
数式をスプレッドシートに組み込む
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 i
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
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
これに続いて、それぞれのコードを使用して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>
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日間の試用期間を選択できます。
価格: 1年間$299から。
従量課金制をご利用いただけます
単一の組織内の開発者ごとの価格、無制限のデプロイメント場所を対象とし、Stripe請求書を使用します。 毎月利用可能なライセンスの数は増加または減少させることができ、ライセンスは各月の終わりに一時停止またはキャンセルすることができます。
価格: 月額29ドルから。
永久ライセンス
永続ライセンスは、新しいバージョンへの更新および一定期間のサポートを受けることができます。その後も、この期間にリリースされたバージョンを使用してソフトウェアの開発を続けることができ、ライセンスの更新は不要です。
同じ企業内では、無制限のデプロイメントサイトを持つ開発者一人当たりの価格。 サポート/アップグレード期間内にリリースされたすべてのEPPlusバージョンの無期限使用。
32日間の試用期間を選択できます。
価格: 年間$599から開始。
パッケージ
初期期間のアップグレードおよびサポートが付随する永久ライセンスオプションが利用可能です。 この期間中にリリースされたバージョンを使用してソフトウェアを開発し続けることができ、ライセンスを更新する必要はありません。
価格: 年間$4295から始まります。
ポリフォームの非商用ライセンス
EPPlusはバージョン5からPolyform Noncommercialライセンスの下でライセンスされています。これは、コードがオープンソースであり、非商業的な用途で使用できることを示しています。 詳細については、彼らのウェブサイトをご覧ください。
永久ライセンス: 各ライセンスは一度購入すると、更新の必要はありません。
無償サポートと製品の更新: 全てのライセンスには、製品の更新と製品を担当するチームからのサポートが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と連携する数式が含まれ、シートが編集されるたびに再計算されます。 セルデータ形式には、複数のテキスト、数値、数式、日付、通貨、パーセンテージ、科学表記、時間があります。カスタム形式は、範囲、列、行などの異なる並べ替え方法を持っています。 セルスタイリングには、さまざまなフォント、サイズ、背景パターン、境界線、配置が含まれています。
10 の .NET API 製品 オフィス文書用