ImportDataメソッドでワークシートからデータを抽出する

今回は「DioDocs(ディオドック)」でImportDataメソッドを使用してExcelのワークシートから必要なデータを抽出し、新しいワークシートに追加する方法を紹介したいと思います。

こちらは2022年2月9日(水)にリリースされた「DioDocs V5J」でDioDocs for Excelに追加されている機能です。

ワークシートからデータを抽出するには?

DioDocs for Excelでワークシートから、任意の範囲のデータを抽出するには、V4Jまでは以下の手順で行う必要がありました。

  1. Excelファイルを読み込む
  2. 新規ワークシートを追加
  3. 既存ワークシートのセル範囲を指定して新規ワークシートへデータをコピー
  4. 既存シートを削除
  5. Excelファイルへ保存

以下のコードが上記の手順を実装したコードです。

var workbook1 = new Workbook();

// Excelファイルを読み込む
workbook1.Open("random-numbers-array.xlsx");

// 新規シート追加
var worksheet1 = workbook1.Worksheets.Add();

// 新規シートにデータをコピー
workbook1.Worksheets[0].Range[0, 0, 1000, 1000].Copy(worksheet1.Range[0, 0, 1000, 1000]);

// 既存シートを削除
workbook1.Worksheets[0].Delete();

// Excelファイルに保存
workbook1.Save("result1.xlsx");

今回V5Jで追加されたImportDataメソッドを使用すると、以下のコードで同じ処理を実装することができます。上記のコードを比べると非常にシンプルになっているかと思います。

var workbook2 = new Workbook();

// Excelファイルからデータを読み込む
var data = Workbook.ImportData("random-numbers-array.xlsx", "Sheet1", 0, 0, 1000, 1000);

// シートにデータをコピー
workbook2.Worksheets[0].Range[0, 0, 1000, 1000].Value = data;

// Excelファイルに保存
workbook2.Save("result2.xlsx");

処理速度を比較してみる

以下のコードで従来の処理とImportDataメソッドの処理の速度を比較してみます。

var sw1 = new System.Diagnostics.Stopwatch();
var workbook1 = new Workbook();

sw1.Start();

// Excelファイルを読み込む
workbook1.Open("random-numbers-array.xlsx");

// ワークシート追加
var worksheet1 = workbook1.Worksheets.Add();

// 新規シートにデータをコピー
workbook1.Worksheets[0].Range[0, 0, 1000, 1000].Copy(worksheet1.Range[0, 0, 1000, 1000]);

// 既存シートを削除
workbook1.Worksheets[0].Delete();

sw1.Stop();

// 結果の表示
Console.WriteLine("処理時間(Open、Add、Copy、Delete)");
Console.WriteLine($" {sw1.ElapsedMilliseconds}ミリ秒");

workbook1.Save("result1.xlsx");

var sw2 = new System.Diagnostics.Stopwatch();
var workbook2 = new Workbook();

sw2.Start();

// Excelファイルからデータを読み込む
var data = Workbook.ImportData("random-numbers-array.xlsx", "Sheet1", 0, 0, 1000, 1000);

// シートにデータをコピー
workbook2.Worksheets[0].Range[0, 0, 1000, 1000].Value = data;

sw2.Stop();

// 結果の表示
Console.WriteLine("処理時間(ImportData)");
Console.WriteLine($" {sw2.ElapsedMilliseconds}ミリ秒");

workbook2.Save("result2.xlsx");

結果は以下のようになります。ImportDataメソッドを使った処理は従来(8496ミリ秒)よりも高速(1472ミリ秒)に動作していることが分かるかと思います。

ImportDataメソッドでワークシートからデータを抽出する

特定のシートからセル範囲を指定してデータを抽出したい場合には、今回紹介したImportDataメソッドを使用してデータをコピーするのがお勧めです。


今回紹介した機能を記載しているサンプルはこちらです。