C#Excel インターオペ ワークアラウンド

This article was translated from English: Does it need improvement?
Translated
View the article in English

多くのプロジェクトはExcelを使用して明確にコミュニケーションしていますが、Microsoft.Office.Interop.Excelを使用している場合、複雑なコードの行に直面することが多いでしょう。 このチュートリアルでは、IronXLをC#のExcel Interopの代替手段として使用し、Interopを使用しなくてもプロジェクトを完了できるようにします。 Excel ファイルのデータを使用し、Excel ファイルを作成し、編集して操作することが、C# プログラミングを使用して可能です。


Excel Interopの代替使用方法

  1. Excelファイルを処理するためのExcelライブラリをインストールします。

  2. Workbookを開いて現在のExcelファイルを追加します。

  3. デフォルトのワークシートを設定します。

  4. Excelワークブックから値を読み取る。

  5. プロセスし、価値を表示する。

    ステップ 1

1. IronXLライブラリをダウンロード

NuGetでインストール して無料ライブラリにアクセスし、Interopを使用せずにExcelを使用するこのチュートリアルをステップバイステップで進めてください。プロジェクトで公開したい場合はライセンスがあります。

Install-Package IronXL.Excel

チュートリアルの方法

2. Excelファイルデータへのアクセス

ビジネスアプリケーションを開発するためには、Excelファイルからのデータに簡単かつ完璧にアクセスでき、さまざまな要件に従ってプログラムで操作できる能力が必要です。 IronXL を使用して、WorkBook.Load() 関数を使うことで、特定の Excel ファイルを読み込むことができます。

WorkBookにアクセスした後、WorkBook.GetWorkSheet() 関数を使用して特定のWorkSheetを選択できます。 これで、すべてのExcelファイルデータが利用可能になりました。 以下の例をご覧ください。これらの関数を使用してC#プロジェクトでExcelファイルのデータを取得する方法を示しています。

/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
/**
Access File Data
anchor-access-excel-file-data
**/
using IronXL;
static void Main(string [] args)
{
    //Access Excel file
    WorkBook wb = WorkBook.Load("sample.xlsx");
    //Access WorkSheet of Excel file
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //get specific cell value
    string a = ws ["A5"].Value.ToString();
    Console.WriteLine(" Getting Single Value:\n\n   Value of Cell A5: {0} ",a);
    Console.WriteLine("\n Getting Many Cells Value using Loop:\n");
    //get many cell values using range function
    foreach (var cell in ws ["B2:B10"])
    {
        Console.WriteLine("   Value is: {0}", cell.Text);
    }
    Console.ReadKey();
}
'''
'''Access File Data
'''anchor-access-excel-file-data
'''*
Imports Microsoft.VisualBasic
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'Access Excel file
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	'Access WorkSheet of Excel file
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'get specific cell value
	Dim a As String = ws ("A5").Value.ToString()
	Console.WriteLine(" Getting Single Value:" & vbLf & vbLf & "   Value of Cell A5: {0} ",a)
	Console.WriteLine(vbLf & " Getting Many Cells Value using Loop:" & vbLf)
	'get many cell values using range function
	For Each cell In ws ("B2:B10")
		Console.WriteLine("   Value is: {0}", cell.Text)
	Next cell
	Console.ReadKey()
End Sub
$vbLabelText   $csharpLabel

このコードは次の結果を生成します。

1output related to 2. Excelファイルデータへのアクセス

以下のようなExcelファイルである場合:

1excel related to 2. Excelファイルデータへのアクセス

私たちのExcelファイルsample.xlsxA5セルにsmall businessが含まれていることがわかります。 B2からB10までの他の値は同じで、出力に表示されます。

データセットとデータテーブル

私たちは、Excelファイルをデータセットやデータテーブルとして使用することもできます。以下の手順を参照してください。

/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
/**
DataSet and DataTables
anchor-dataset-and-datatables
**/
//Access WorkBook.          
WorkBook wb = WorkBook.Load("sample.xlsx");
//Access WorkSheet.
 WorkSheet ws = wb.GetWorkSheet("Sheet1");
//Behave with a workbook as Dataset.
DataSet ds = wb.ToDataSet(); 
//Behave with workbook as DataTable
DataTable dt = ws.ToDataTable(true);
'''
'''DataSet and DataTables
'''anchor-dataset-and-datatables
'''*
'Access WorkBook.          
Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
'Access WorkSheet.
 Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
'Behave with a workbook as Dataset.
Dim ds As DataSet = wb.ToDataSet()
'Behave with workbook as DataTable
Dim dt As DataTable = ws.ToDataTable(True)
$vbLabelText   $csharpLabel

Excel DataSetとDataTablesの操作方法については、さらに多くのコード例とプロセスの説明を提供しています。

では、次に、C#プロジェクトで新しいExcelファイルを作成する方法について見ていきます。


新しいExcelファイルを作成する

私たちは、CSharpプロジェクトでプログラムによって新しいExcelスプレッドシートを簡単に作成し、データを挿入できます。 これを達成するために、IronXLは新しいExcelファイルを作成するWorkBook.Create()関数を提供します。

その後、WorkBook.CreateWorkSheet() 関数を使用して、必要に応じて多数のワークシートを作成することができます。

その後、以下の例に示すようにデータを挿入することもできます:

/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
/**
Create New Excel 
anchor-create-new-excel-file
**/
using IronXL;
static void Main(string [] args)
{
    //create new WorkBook
    WorkBook wb = WorkBook.Create();
    //Create new WorkSheet in wb
    WorkSheet ws = wb.CreateWorkSheet("sheet1");
    //Insert Data 
    ws ["A1"].Value = "New Value A1";
    ws ["B2"].Value = "New Value B2";
    //Save newly created Excel file
    wb.SaveAs("NewExcelFile.xlsx");
}
'''
'''Create New Excel 
'''anchor-create-new-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	'create new WorkBook
	Dim wb As WorkBook = WorkBook.Create()
	'Create new WorkSheet in wb
	Dim ws As WorkSheet = wb.CreateWorkSheet("sheet1")
	'Insert Data 
	ws ("A1").Value = "New Value A1"
	ws ("B2").Value = "New Value B2"
	'Save newly created Excel file
	wb.SaveAs("NewExcelFile.xlsx")
End Sub
$vbLabelText   $csharpLabel

上記のコードは、NewExcelFile.xlsx という名前の新しいExcelファイルを作成し、セルアドレスA1B1にそれぞれ値New Value A1New Value B2を挿入します。 この設定を行うことで、必要なだけデータを同じ方法で挿入することができます。 注意: 新しいExcelファイルを作成する場合や既存のファイルを修正する場合は、上記の例に示されているようにファイルを保存することを忘れないでください。 C#を使用して新しいExcelスプレッドシートを作成する方法について詳しく調べ、プロジェクトでコードを試してみてください。


4. 既存のExcelファイルを修正する

既存のExcelファイルを変更し、プログラムを使って更新されたデータを挿入することができます。 Excelファイルの変更において、以下の側面を見ていきます:

  • セル値を更新する
  • 古い値を新しいものに置き換える
  • 行または列を削除

    上記のトピックをCSharpプロジェクトに実装する方法を見てみましょう。

セル値を更新

既存のExcelスプレッドシートのセル値を更新するのは非常に簡単です。 プロジェクト内のExcelファイルにアクセスし、その作業シートを指定して、以下の例のようにデータを更新してください。

/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
/**
Update Cell Value
anchor-update-cell-value
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //update A3 value
    ws ["A3"].Value = "New Value of A3";
    wb.SaveAs("sample.xlsx");
}
'''
'''Update Cell Value
'''anchor-update-cell-value
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'update A3 value
	ws ("A3").Value = "New Value of A3"
	wb.SaveAs("sample.xlsx")
End Sub
$vbLabelText   $csharpLabel

上記のコードは、セルA3の値をNew Value of A3で更新します。

次のように、範囲関数を使用して複数のセルに静的な値を更新することもできます:

 ws ["A3:C3"].Value = "New Value";
 ws ["A3:C3"].Value = "New Value";
ws ("A3:C3").Value = "New Value"
$vbLabelText   $csharpLabel

これはExcelファイルの行番号3をA3セルからC3セルにNew Valueで更新します。

これらの例でC#のRange関数の使用方法について詳しく学びましょう。

セル値の置換

IronXLの美しさは、既存のExcelファイル内で古い値新しい値に簡単に置き換えられることであり、次のすべての側面をカバーしています:

  • ワークシート全体の値を置換する:
 WorkSheet.Replace("old value", "new value");
 WorkSheet.Replace("old value", "new value");
WorkSheet.Replace("old value", "new value")
$vbLabelText   $csharpLabel
  • 特定の行の値を置き換える:
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows [RowIndex].Replace("old value", "new value");
WorkSheet.Rows (RowIndex).Replace("old value", "new value")
$vbLabelText   $csharpLabel
  • 特定の列の値を置き換える:
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'WorkSheet.Columns [ColumnIndex].Replace("old value", "new Value")
$vbLabelText   $csharpLabel
  • 特定の範囲内の値を置き換える:
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ["From:To"].Replace("old value", "new value");
WorkSheet ("From:To").Replace("old value", "new value")
$vbLabelText   $csharpLabel

ここで、上記の機能を使用して値を置き換える方法を、CSharpプロジェクトの例で具体的に見てみましょう。 これには、特定の範囲で値を置き換えるためにreplace関数を使用します。

/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
/**
Replace Cell Value Range
anchor-replace-cell-values
**/
using IronXL;
static void Main(string [] args)
{
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Specifying Range from B5 to G5
    ws ["B5:G5"].Replace("Normal", "Good");
    wb.SaveAs("sample.xlsx");
}
'''
'''Replace Cell Value Range
'''anchor-replace-cell-values
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Specifying Range from B5 to G5
	ws ("B5:G5").Replace("Normal", "Good")
	wb.SaveAs("sample.xlsx")
End Sub
$vbLabelText   $csharpLabel

上記のコードは、B5からG5までのNormalの値をGoodに置き換え、残りのワークシートはそのままです。 範囲内のExcelセル値を編集する方法とIronXLのこの機能の使用についてもっと見る。

Excelファイルの行を削除

アプリケーション開発において、既存のExcelファイルの行全体をプログラムで削除する必要がある場合があります。 このタスクでは、IronXLのRemoveRow()関数を使用します。 Here's an example: 例があります。

/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
/**
Remove Row
anchor-remove-rows-of-excel-file
**/
using IronXL;
static void Main(string [] args)
{ 
    WorkBook wb = WorkBook.Load("sample.xlsx");
    WorkSheet ws = wb.GetWorkSheet("Sheet1");
    //Remove the row number 2
    ws.Rows [2].RemoveRow();
    wb.SaveAs("sample.xlsx");
}
'''
'''Remove Row
'''anchor-remove-rows-of-excel-file
'''*
Imports IronXL
Shared Sub Main(ByVal args() As String)
	Dim wb As WorkBook = WorkBook.Load("sample.xlsx")
	Dim ws As WorkSheet = wb.GetWorkSheet("Sheet1")
	'Remove the row number 2
	ws.Rows (2).RemoveRow()
	wb.SaveAs("sample.xlsx")
End Sub
$vbLabelText   $csharpLabel

上記のコードは、sample.xlsxの行番号2を削除します。


チュートリアル クイック アクセス

IronXL リファレンス

IronXLのAPIリファレンスを読んで、すべての機能、特徴、クラス、および名前空間について詳しく知りましょう。

IronXL リファレンス
Documentation related to チュートリアル クイック アクセス