4

データの配列を範囲の値に直接割り当てる Excel 相互運用機能を使用してデータを書き込む最速の方法に関する記事がいくつかあります。お気に入り:

string[,] multidimensionalArrayData = new string[200, 3];
    // (...) Fill multidimensionalArrayData with your data
dataSheet.Range["A1:C200"].Value = multidimensionalArrayData;

また、テキストの特定の部分のフォントの色を変更する方法に関する記事もいくつかあります (今回は VB)。

With ActiveCell.Characters(Start:=3, Length:=3).Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 10
    .Color = "Red"
    .ThemeFont = xlThemeFontNone
End With

ここでの問題は、何千ものセルのテキストの特定の部分の色を変更する最速の方法は何でしょうか? 現在、私の C# コードでは、セルごとに実行する必要があり、パフォーマンスが大幅に低下しています。C# で 'Characters' オブジェクトの配列を入力し、その配列を一度に範囲に渡す方法はありますか? 他の解決策はありますか?

4

3 に答える 3

5

Excel Interop を使用した操作は常に遅くなり、より多くのメモリが消費されるため、お勧めできません。

以下は、Excel のインストールを必要とせずに、必要なことを実行するためのオープン ソースでありながら高速な方法の一部です。

http://closedxml.codeplex.com/
http://epplus.codeplex.com/
http://code.google.com/p/excellibrary/
http://npoi.codeplex.com

Microsoft がリリース: Open XML 2.0
あなたが望むことをするための別のより速い方法。
ダウンロード: http://www.microsoft.com/en-us/download/details.aspx?id=5124
はじめに: http://blog.stuartwhiteford.com/?p=49

于 2012-07-01T03:09:36.963 に答える
2

このコードでパフォーマンスが大幅に向上するかどうかはわかりません (個々のセルへのハッキングは時間のかかる操作であるため)。文字は明らかに範囲プロパティであるため、特定のセルを指定する必要はありません。

以下を使用して、ループを回避できます

With Range("A1:A3").Characters(1, 2).Font
    .Name = "Arial"
    .Size = 6
End With

素晴らしい質問です..部分的なセルをフォーマットするために多くのユースケースがありましたが、手動で行うのは面倒です.

于 2012-07-01T02:34:47.793 に答える
2

信じられないかもしれませんが、Excel を作成するためのさまざまなライブラリと数か月間格闘した後、ついに Excel Interop に戻ったと言わざるを得ません。

私は、ClosedXML、EPPlus、SpreadsheetLite を試し、各ライブラリを学習し、コードを適応させるという面倒な作業を行いました。ターンアラウンド、バグ、時々開くことができない Excel の生成、時々ひどいパフォーマンスの問題、またはあちこちでのメモリ不足のクラッシュの長い旅の後、Excel Interop をもう一度試してみることにしました。私のシナリオではエラーなし。

mjb の回答でライブラリを試してみたい場合は、それを実行してください。ただし、最初にできる限り最善の相互運用コードを作成することをお勧めします。正しく実行すると、最終的にどれだけ高速になるかに驚くかもしれません。

私の場合の最良の選択肢は次のとおりです。

Excel 相互運用を使用します。2 次元配列を使用して一度にすべての Excel データを書き込み、2 番目のパスで必要なセルのリッチ テキストを書式設定します。

于 2013-05-09T17:53:16.767 に答える