3

次のコードでExcelシートを読んでいます:

  Excel.Range uRange = xlWorkSheet.UsedRange;  
  dynamic data = uRange.Value2;

ご覧のとおり、使用した範囲セルの値を動的 2D 配列にコピーします。選択した範囲の 1 つの列はカスタム形式であり、上記のテクニックを使用すると、このカスタム形式のセル (data[x,y]) にアクセスすると、適切な形式の値ではなく、一連の数値が得られます。

次のコードで特定のセルのみに直接アクセスしている場合:

 (Excel.Range)xlWorkSheet.Cells[x, y].Text

...必要なフォーマットされた値を確認できます。各セルに個別にアクセスすることで、ループ内のセルごとにアクセスするのが遅くなるため、多くの時間を失っています。

選択した範囲からすべてのテキスト値を取得することは可能ですか? このようなもの:

 Excel.Range uRange =xlWorkSheet.UsedRange; 
 dynamic data = uRange.Text;

上記のコードを使用すると、空の変数が取得されます。

4

4 に答える 4

2

Silverlight アプリケーションで COM 相互運用機能を使用して Excel ファイルにアクセスしている場合、その方法は機能しないことに注意してください。

これが解決策です。基本的には、列を反復処理し、各列の 1 次元配列を取得する必要があります。(このアプローチは非常に高速です)

 foreach (var column in fullRange.Columns)
 {
   // vals will be a one-dimensional array 
   // of all values in that column!
   var vals = column.Value;

   foreach (var val in vals)
   {
       if (val == null) continue;
       string cellValue = val.ToString();
       //Debug.WriteLine(" Value read: " + cellValue);
       //do something with the value...

   }
 }
于 2012-02-28T03:33:14.590 に答える
1

これが私がそれを機能させる方法です(私のものを日付としてフォーマットしました):

currentWorksheet.Range["A2", "A10"].NumberFormat = "m/d/yyyy";
dynamic vals = currentWorksheet.Range["A2", "A10"].Value;
于 2011-09-14T13:46:22.337 に答える
0

使用するObject obj = uRange.Value2

于 2011-08-05T10:40:21.180 に答える