今回は「DioDocs(ディオドック)」でImportDataメソッドを使用してExcelのワークシートから必要なデータを抽出し、新しいワークシートに追加する方法を紹介したいと思います。
こちらは2022年2月9日(水)にリリースされた「DioDocs V5J」でDioDocs for Excelに追加されている機能です。
ワークシートからデータを抽出するには?
DioDocs for Excelでワークシートから、任意の範囲のデータを抽出するには、V4Jまでは以下の手順で行う必要がありました。
- Excelファイルを読み込む
- 新規ワークシートを追加
- 既存ワークシートのセル範囲を指定して新規ワークシートへデータをコピー
- 既存シートを削除
- 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メソッドを使用してデータをコピーするのがお勧めです。
今回紹介した機能を記載しているサンプルはこちらです。
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。