Excelファイルを例として読む
78326 ワード
このチュートリアルでは、CからのExcelファイルを読む方法と、検証のような日常的なタスクのためのライブラリ、データベースへの変換、Web APIからのデータの保存、およびスプレッドシート内の数式の変更方法について説明します.この記事はIronxlコードサンプルを参照してください.NETコアコンソールアプリ.
Excelのファイルを読んで作成してください.NETの言語は簡単にirronlソフトウェアライブラリを使用しています.
Excelは、サーバーまたは相互運用にインストールする必要はありません.マイクロソフトよりも速く、より直感的なAPIを提供します.オフィス相互運用.エクセル.
概要
これらのステップ( CSV - xlsx & xls )を実行して、ExcelファイルをCで読みます. CSVファイルをダウンロードしてください Excelファイルの読み込みと読み込み のExcelワークブックを作成する セルを有効にし、セルの値を編集する スプレッドシートデータの検証 エンティティフレームワークを使用したデータのエクスポート
Excelファイルからデータを読み込む
Ironxlは、そうです.マイクロソフトExcel文書を読み、編集するのを容易にするネットライブラリ.このチュートリアルでは、Cシャープコードを使用してExcelファイルを読むことができます. Ironxl Excelライブラリをインストールします.我々は、我々を使用してこれを行うことができますNuGet package または.Net Excel DLL.
ワークブックを使用します.Loadメソッドを使用して任意のXLS、XLSXまたはCSVドキュメントを読み込みます. 直近の構文を使用してセル値を取得します
を含む 当社からの専用の製品サポート.ネットエンジニア マイクロソフトVisual Studio経由で簡単にインストール 開発のための30日間無料試用テスト.からのライセンス 私たちはどのように簡単にCのファイルを読むことができます.Ironxlライブラリを使用したネット.試料は3枚のエクセルシートを含んでいる.
XLSまたはXLSXファイルを読む
この例では、Excelファイルを効率的に読むことができます.最終的な高度な操作は、LINQの互換性と集計範囲の数学を示しています.
C
ステップ1
無料ダウンロードはこちら
まず最初に必要なのは、Ironxl Excelライブラリをインストールすることです.NET Framework.
Ironxl Excelをインストールするには、簡単に私たちのNuGetパッケージを使用して達成されますが、手動でインストールするように選択することもできますDLL プロジェクトまたはグローバルアセンブリキャッシュに.
パッケージのインストール Visual Studioでプロジェクトを選択します Ironxl Excelパッケージのインストールとインストール
インストールするもう一つの方法は パッケージマネージャーを入力します type > installパッケージを作成します.エクセル
インストールのダウンロード
あるいは、我々はダウンロードして起動することができます.NET Excel DLL また、手動でVisual Studioにインストールします.
チュートリアル
2 .ワークブックを読み込む
The
C
各ワークブックに複数の
C
ワークブックを作成する
メモリ内の新しいワークブックを作成するには、シートタイプの新しいブックを作成します.
C
注意: ExcelFileFormatを使用します.マイクロソフトExcelスプレッドシート(95とそれ以前)のための遺産のためのXLS.
ワークシートの作成
各“ブック”は、複数のワークシートを持つことができます.ワークシートは、ワークシートのコレクションを表します.これは、2つのワークシートを持つ1つのワークブックがExcelにどのように見えるかです.
新しいワークシートコールを作成するには
C
Getセル範囲
“range”クラスは“セル”オブジェクトの2次元コレクションを表します.これはExcelセルのリテラル範囲を表します.ワークシートオブジェクトの文字列インデクサーを使用して範囲を取得します.
引数テキストは、セルの座標(例えば“a 1”)または左から右へのセルのスパン(例えば「B 2 : E 5」)です.また、コールすることも可能です
C
6 .範囲内でセル値を編集する
範囲内のセルの値を読み書きする方法はいくつかあります.カウントが既知の場合は、forループを使用します.
C
スプレッドシートデータの検証
を使用してデータシートを検証します.DataValidationサンプルを使用します
C
このコードは新しいシートを作成し、ヘッダーを指定し、無効なデータのログがあるようにエラーメッセージの結果を出力します.
C
エンティティフレームワークを使用したデータのエクスポート
データベースにデータをエクスポートするか、Excelスプレッドシートをデータベースに変換するには、Ironxlを使用してください.The
EntityFrameworkを使用してデータベースを構築し、データラインをエクスポートします.
SQLiteエンティティフレームワークnugetパッケージを追加します.
EntityFrameworkを使用すると、データベースにデータをエクスポートできるモデルオブジェクトを作成できます.
C
C
スプレッドシートに数式を追加する
式を設定する
以下のコードは、各状態を反復し、Cの割合を合計します.
C
10 . APIからスプレッドシートへデータをダウンロードする
以下の呼び出しは、残りの呼び出しをRestClient.NET. JSONをダウンロードして、タイプの「リスト」にそれを変えます
C
これはAPI JSONデータがどのように見えるかです.
次のコードは国を反復し、スプレッドシートの名前、母集団、領域、数値コード、およびトップ3の言語を設定します.
C
オブジェクト参照とリソース
また、あなたはIronXL class documentation 大きな価値のオブジェクトリファレンス内で.
さらに、他のチュートリアルがあります.エクセル含むCreating, Opening, Writing, Editing, Saving, and Exporting Excel相互運用を使用しないXLS , XLSX , CSVファイル.
概要
東北大理Excelは一人です.スプレッドシートフォーマットの多種多様な読書のためのネットソフトウェアライブラリ.必要ないMicrosoft Excel インストールされ、相互運用に依存しない.
11 .読んだExcelファイルC
Excelのファイルを読んで作成してください.NETの言語は簡単にirronlソフトウェアライブラリを使用しています.
Excelは、サーバーまたは相互運用にインストールする必要はありません.マイクロソフトよりも速く、より直感的なAPIを提供します.オフィス相互運用.エクセル.
概要
これらのステップ( CSV - xlsx & xls )を実行して、ExcelファイルをCで読みます.
Excelファイルからデータを読み込む
Ironxlは、そうです.マイクロソフトExcel文書を読み、編集するのを容易にするネットライブラリ.このチュートリアルでは、Cシャープコードを使用してExcelファイルを読むことができます.
sheet["A11"].DecimalValue
を含む
XLSまたはXLSXファイルを読む
この例では、Excelファイルを効率的に読むことができます.最終的な高度な操作は、LINQの互換性と集計範囲の数学を示しています.
C
/**
Read XLS or XLSX File
anchor-read-an-xls-or-xlsx-file
**/
using IronXL;
using System.Linq;
//Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
WorkBook workbook = WorkBook.Load("test.xlsx");
WorkSheet sheet = workbook.WorkSheets.First();
//Select cells easily in Excel notation and return the calculated value
int cellValue = sheet["A2"].IntValue;
// Read from Ranges of cells elegantly.
foreach (var cell in sheet["A2:A10"])
{
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
///Advanced Operations
//Calculate aggregate values such as Min, Max and Sum
decimal sum = sheet["A2:A10"].Sum();
//Linq compatible
decimal max = sheet["A2:A10"].Max(c => c.DecimalValue);
VB'''
'''Read XLS or XLSX File
'''anchor-read-an-xls-or-xlsx-file
'''*
Imports IronXL
Imports System.Linq
'Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
Private workbook As WorkBook = WorkBook.Load("test.xlsx")
Private sheet As WorkSheet = workbook.WorkSheets.First()
'Select cells easily in Excel notation and return the calculated value
Private cellValue As Integer = sheet("A2").IntValue
' Read from Ranges of cells elegantly.
For Each cell In sheet("A2:A10")
Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
'''Advanced Operations
'Calculate aggregate values such as Min, Max and Sum
Dim sum As Decimal = sheet("A2:A10").Sum()
'Linq compatible
Dim max As Decimal = sheet("A2:A10").Max(Function(c) c.DecimalValue)
ステップ1
無料ダウンロードはこちら
まず最初に必要なのは、Ironxl Excelライブラリをインストールすることです.NET Framework.
Ironxl Excelをインストールするには、簡単に私たちのNuGetパッケージを使用して達成されますが、手動でインストールするように選択することもできますDLL プロジェクトまたはグローバルアセンブリキャッシュに.
パッケージのインストール
インストールするもう一つの方法は
PM > Install-Package IronXL.Excel
また、あなたはview the package on the NuGet site here インストールのダウンロード
あるいは、我々はダウンロードして起動することができます.NET Excel DLL また、手動でVisual Studioにインストールします.
チュートリアル
2 .ワークブックを読み込む
The
WorkBook
Excelシートを表します.Cを使ってExcelファイルを開くには、ワークブックを使用します.Excelファイル(. xlsx)のパスを読み込み、指定します.C
/**
Load WorkBook
anchor-load-a-workbook
**/
var workbook = WorkBook.Load(@"Spreadsheets\\GDP.xlsx");
VB'''
'''Load WorkBook
'''anchor-load-a-workbook
'''*
Dim workbook = WorkBook.Load("Spreadsheets\\GDP.xlsx")
例: exceltodbprocessor各ワークブックに複数の
WorkSheet
オブジェクト.これらはExcelドキュメントのワークシートを表します.シートがワークシートを含んでいる場合、名前でそれらを取得するWorkBook.GetWorkSheet
.C
var worksheet = workbook.GetWorkSheet("GDPByCountry");
VBDim worksheet = workbook.GetWorkSheet("GDPByCountry")
サンプル: exceltodbワークブックを作成する
メモリ内の新しいワークブックを作成するには、シートタイプの新しいブックを作成します.
C
/**
Create WorkBook
anchor-create-a-workbook
**/
var workbook = new WorkBook(ExcelFileFormat.XLSX);
VB'''
'''Create WorkBook
'''anchor-create-a-workbook
'''*
Dim workbook As New WorkBook(ExcelFileFormat.XLSX)
サンプル: apitoexcelprocessor注意: ExcelFileFormatを使用します.マイクロソフトExcelスプレッドシート(95とそれ以前)のための遺産のためのXLS.
ワークシートの作成
各“ブック”は、複数のワークシートを持つことができます.ワークシートは、ワークシートのコレクションを表します.これは、2つのワークシートを持つ1つのワークブックがExcelにどのように見えるかです.
新しいワークシートコールを作成するには
WorkBook.CreateWorkSheet
ワークシートの名前を渡します.C
var worksheet = workbook.CreateWorkSheet("Countries");
VBDim worksheet = workbook.CreateWorkSheet("Countries")
Getセル範囲
“range”クラスは“セル”オブジェクトの2次元コレクションを表します.これはExcelセルのリテラル範囲を表します.ワークシートオブジェクトの文字列インデクサーを使用して範囲を取得します.
引数テキストは、セルの座標(例えば“a 1”)または左から右へのセルのスパン(例えば「B 2 : E 5」)です.また、コールすることも可能です
GetRange
ワークシートで.C
var range = worksheet["D2:D101"];
VBDim range = worksheet("D2:D101")
サンプル:データバリエーション6 .範囲内でセル値を編集する
範囲内のセルの値を読み書きする方法はいくつかあります.カウントが既知の場合は、forループを使用します.
C
/**
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);
}
VB'''
'''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
サンプル:データバリエーションスプレッドシートデータの検証
を使用してデータシートを検証します.DataValidationサンプルを使用します
libphonenumber-csharp
電話番号を検証し、電子メールアドレスと日付を検証するために標準CチェックインAPIを使用します.C
/**
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);
}
VB'''
'''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
上記のコードは、スプレッドシートの各行をループし、リストとしてセルをグラブします.Validateメソッドは、セルの値をチェックし、値が無効な場合はエラーメッセージを返します.このコードは新しいシートを作成し、ヘッダーを指定し、無効なデータのログがあるようにエラーメッセージの結果を出力します.
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");
VBDim 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")
エンティティフレームワークを使用したデータのエクスポート
データベースにデータをエクスポートするか、Excelスプレッドシートをデータベースに変換するには、Ironxlを使用してください.The
ExcelToDB
サンプルは国ごとにGDPでスプレッドシートを読み込み、そのデータをSQLiteにエクスポートします.EntityFrameworkを使用してデータベースを構築し、データラインをエクスポートします.
SQLiteエンティティフレームワークnugetパッケージを追加します.
EntityFrameworkを使用すると、データベースにデータをエクスポートできるモデルオブジェクトを作成できます.
C
public class Country
{
[Key]
public Guid Key { get; set; }
public string Name { get; set; }
public decimal GDP { get; set; }
}
VBPublic Class Country
<Key>
Public Property Key() As Guid
Public Property Name() As String
Public Property GDP() As Decimal
End Class
別のデータベースを使用するには、対応するnugetパッケージをインストールし、UseSqLite()
C/**
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);
}
}
VB'''
'''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
データをデータベースにコミットするC
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();
}
}
VBPublic 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
サンプル: exceltodbスプレッドシートに数式を追加する
式を設定する
Cell
'とのFormula
プロパティ.以下のコードは、各状態を反復し、Cの割合を合計します.
C
/**
Add Spreadsheet Formulae
anchor-add-formulae-to-a-spreadsheet
**/
//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}";
}
VB'''
'''Add Spreadsheet Formulae
'''anchor-add-formulae-to-a-spreadsheet
'''*
'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
サンプル10 . APIからスプレッドシートへデータをダウンロードする
以下の呼び出しは、残りの呼び出しをRestClient.NET. JSONをダウンロードして、タイプの「リスト」にそれを変えます
RestCountry
. その後、各国を繰り返して、残りのAPIからExcelスプレッドシートにデータを保存するのは簡単です.C
/**
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>>();
VB'''
'''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))()
サンプル: apitoExcelこれはAPI JSONデータがどのように見えるかです.
次のコードは国を反復し、スプレッドシートの名前、母集団、領域、数値コード、およびトップ3の言語を設定します.
C
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;
}
}
VBFor 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 class documentation 大きな価値のオブジェクトリファレンス内で.
さらに、他のチュートリアルがあります.エクセル含むCreating, Opening, Writing, Editing, Saving, and Exporting Excel相互運用を使用しないXLS , XLSX , CSVファイル.
概要
東北大理Excelは一人です.スプレッドシートフォーマットの多種多様な読書のためのネットソフトウェアライブラリ.必要ないMicrosoft Excel インストールされ、相互運用に依存しない.
11 .読んだExcelファイルC
Reference
この問題について(Excelファイルを例として読む), 我々は、より多くの情報をここで見つけました https://dev.to/ironsoftware/c-read-excel-file-with-examples-353gテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol