「DioDocs for Excel」のV5Jで新たに追加されたImportDataメソッドは、Excelファイルのワークシートから必要なデータを従来よりも高速に抽出することができます。
2022年5月25日にリリースしたV5J SP1ではさらにImportDataメソッドの機能強化が行われています。以前のV5Jでは以下のコードのように、ImportDataメソッドの引数に抽出したいデータが含まれるワークシートとセル範囲を設定する必要がありました。
var workbook = new Workbook();
// Excelファイルからデータを読み込む
var data = Workbook.ImportData("random-numbers-array.xlsx", "Sheet1", 0, 0, 1000, 1000);
// シートにデータをコピー
workbook.Worksheets[0].Range[0, 0, 1000, 1000].Value = data;
// Excelファイルに保存
workbook.Save("result2.xlsx");
今回のV5J SP1ではセル範囲を設定する方法の他に、ワークシートやテーブルを設定することができるようになりました。以下のワークシート「売り上げデータ」にテーブル「Sales2022Q1」が含まれるケースを想定してみます。
以下のコードのように、ImportDataメソッドの引数にワークシートとテーブル名"売り上げデータ!Sales2022Q1"
を設定してデータを抽出することができます。従来よりも設定する引数が少なくなり効率よく記載することができます。
また、テーブルの範囲が増減してもとくにセル範囲を意識することなくテーブル名だけでデータを抽出できるのもメリットです。
var workbook = new Workbook();
// Excelファイルからデータを読み込む
var data = Workbook.ImportData("importdata-table.xlsx", "売り上げデータ!Sales2022Q1");
// シートにデータをコピー
workbook.Worksheets[0].Range[0, 0, data.GetLength(0), data.GetLength(1)].Value = data;
// Excelファイルに保存
workbook.Save("result.xlsx");
データを抽出したワークシートは以下のようになります。
また、以下のコードのようにImportDataメソッドの引数にA1参照形式の表記"売り上げデータ!A1:G21"
でデータを抽出するセル範囲を設定することも可能になっています。
var workbook = new Workbook();
// Excelファイルからデータを読み込む
var data = Workbook.ImportData(fileStream, "売り上げデータ!A1:G21");
// シートにデータをコピー
workbook.Worksheets[0].Range[0, 0, data.GetLength(0), data.GetLength(1)].Value = data;
// Excelファイルに保存
workbook.Save("result.xlsx");
開発の要件にあわせて使い分けることができるかと思います。今回紹介した機能を記載しているサンプルはこちらです。
ImportDataメソッドの速さのヒミツ
以前の記事ではOpenメソッドを使用した場合とのパフォーマンスを比較していましたが、なぜImportDataメソッドが速いのかについては言及していませんでしたので改めて説明したいと思います。
Openメソッド | ImportDataメソッド |
---|---|
Excelオブジェクトをロードします | Excelオブジェクトをロードしません |
スプレッドシートを開き、値や数式を含むすべてのデータ型を読み込みます | スプレッドシートを開き、データのみを取得します |
数式が読み込まれ、CalcEngineが機能します | 数式は無視されます |
オブジェクト全体をロードする必要があるため、比較的時間がかかります | オブジェクトをロードせず、代わりにデータを取得するだけなので、はるかに高速です |
上記のようにImportDataメソッドではデータのみを取得することができます。数式やオブジェクトモデルは読み込まれないため、Openメソッドを使用した場合よりも高速にデータを抽出することができます。
さいごに
弊社Webサイトでは、製品の機能を気軽に試せるデモアプリケーションやトライアル版も公開していますので、こちらもご確認いただければと思います。
また、ご導入前の製品に関するご相談やご導入後の各種サービスに関するご質問など、お気軽にお問合せください。