Fastest way to interface between live (unsaved) Excel data and C# objects Excelデータに効率的にアクセスする方法についての知識豊富なディスカッションがあります。答えによると、2つの推奨事項は、Excel-Dnaまたはアドインエクスプレスを使用することです。他のプロセスのライブExcelデータ/プロパティに最も高速にアクセスするには
Excel-Dnaとアドインエクスプレスの両方がExcelアドインとして実行する必要があると思います。私の場合、ビジネスロジックは別のプロセスで実行され、Excelインスタンス(New Excel.Application()
)が作成されます。 Excelの変更で内部オブジェクトを更新する必要があります。
Excelのセル値を取得するには、効率的にDirectCast(Range.Value, Object(,))
を使用します。残念ながら、これはRange.Text
またはRange.NumberFormat
のような他のプロパティでは不可能です。予想どおり、スルーセルの反復は非常に遅いです。
メインプロセスからExcelデータにアクセスする最も効率的な方法は何だと思いますか?私が思いついた1つのアイデアは、Excelにアドインを追加することです(Excel-Dnaと言っています)。データを集計してメインアプリケーションに投稿します。 AppDomainのクロスマーシャリングに関する経験があまりないので、これが実行可能なアプローチか、別のものが優先されるべきかどうか評価することができます。
Range.Textの値を取得することは、精度が落ちたり、列幅が小さすぎると数値の代わりに###を取得したりする可能性があるため、通常はお勧めできません。 .Text .Valueの構成要素については、http://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/を参照してください。 .Value2 –
合意しました.Value(2)と.NumberFormatを使用する方が良いです。だから問題は.NumberFormat(と2番目のステップで評価したい追加の書式設定プロパティ)を効率的にクエリする方法が残っています。 –