【C#エクセル操作】ClosedXML – セル⇔2次元配列の相互変換
当ページのリンクには広告が含まれています。
ClosedXMLを用いて セル⇔2次元配列の相互変換 する方法を解説します
クリックしてジャンプ
準備(usingの記述)
ClosedXMLを使うために書かなければいけない おまじない があります。
using ClosedXML.Excel; // ClosedXMLを使うためのおまじない
using ClosedXML.Excel.Drawings; // ClosedXMLを使うためのおまじない
おまじない を書く場所は プログラムの頭です。
※ NuGet による ClosedXMLライブラリ が追加してあることが前提です。
ライブラリの追加については こちら の記事を参考にしてください。
【C#エクセル】ClosedXML インストール方法
C#プログラミングでエクセルを開かずに操作するためのライブラリ 「ClosedXML」について 簡単な説明と、インストール方法 を解説します ※ ClosedXMLのアップデートなどによ…
ClosedXMLライブラリ を追加してない状態で おまじないを書いたらエラーになります。
セルから2次元配列へ読み込み
エクセルから読み出して2次元配列へ読み込むサンプルコードです
読み込む範囲はRangeUsed()
メソッドを使って、使用されている範囲を取得しています
using (var wb = new XLWorkbook(@"C:\新しいフォルダー\エクセルブック.xlsx"))
{
// 使用されている範囲を取得
var range = wb.Worksheet("sheet1").RangeUsed();
// 2次元配列を定義します。
var array = new object[range.RowCount(), range.ColumnCount()];
// Excelの範囲から2次元配列へデータを読み込みます。
for (int i = 1; i <= range.RowCount(); i++)
{
for (int j = 1; j <= range.ColumnCount(); j++)
{
array[i - 1, j - 1] = range.Cell(i, j).Value;
}
}
// 'using'ブロックの終わりでworkbookは自動的に閉じられます。保存はされません。
}
2次元配列からセルへ書き込み
2次元配列をエクセルに書き込むサンプルコードです
.Cell(startCellAddress).CellBelow(i).CellRight(j)
は、指定されたスタートセル(startCellAddress
)を基点として、そのセルから下に i
行、右に j
列 移動した位置にあるセルを参照しています。
具体的には:
.Cell(startCellAddress)
:startCellAddress
で指定されたアドレスにあるセルを取得します。例えば"A1"
が指定されていれば、A1セルを指します。.CellBelow(i)
:基点となるセルから下方向にi
行移動したセルを参照します。例えば、基点が A1 でi
が 1 なら、A2セルを指します。.CellRight(j)
:さらに、そのセルから右方向にj
列移動したセルを参照します。例えば、基点が A1 でj
が 1 なら、B1セルを指します。
// 2次元配列のデータを準備
var data = new[,]
{
{ "ヘッダー1", "ヘッダー2" },
{ "データ1", "データ2" }
};
using (var wb = new XLWorkbook(@"C:\新しいフォルダー\エクセルブック.xlsx"))
{
// 開始セルのアドレスを指定します。ここでは "A1" から始めます。
var startCell = ws.Cell("A1");
// 配列のデータをワークシートに書き込みます。
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = 0; j < data.GetLength(1); j++)
{
// 直接 wb.Worksheet("sheet1") を使って値を設定します。
wb.Worksheet("sheet1").Cell(startCellAddress).CellBelow(i).CellRight(j).Value = data[i, j];
}
}
// ファイルに変更を上書き保存します。
wb.Save();
}
// 'using' ステートメントの外でwbオブジェクトは自動的に破棄されます。