2

重複の可能性:
OutofMemory 例外オブジェクトの配列サイズ

スプレッドシート データを 2D 配列に取り込もうとしています。私はVSTOを使用しています。

int rc = 1048576;
int cc = 1638;

string[,] arr = new string[rc, cc];

最後の行で Out of Memory 例外がスローされます。「X」要素のみをキャプチャできることをユーザーに伝えるメッセージを表示したいと思います。

MSDNを確認したところ、データテーブルには16,777,216の行数制限が記載されています。したがって、データテーブルはワークシートのサイズのデータ​​を保持できます。2D 配列の制限が見つかりません。

私の問題は例外ではありません。私が探しているのは、VSTO 開発を行っていて、インメモリ結合などを実行するために DataTable にワークシートをキャプチャする必要がある場合は、次のようにする必要があります。

string[,] arr = new string[rc, cc]; 
Microsoft.Office.Interop.Excel.Range selection 
arr = selection.Value as string[,]; 

次に、その配列からデータ テーブルにデータをコピーします。ユーザーが選択する必要がある要素の数の理想的な制限はどれくらいになるでしょうか。そのため、行数/列数の制限を設定し、選択がこの基準を超えたときにメッセージを表示できます。または、最初の行が常に列ヘッダーであることを考慮して、ワークシートで選択した範囲に基づいてデータ テーブルを作成する他の方法はありますか。

4

1 に答える 1

0

できることは、独自のクラスを作成することです。

    public class MyClass {   
 public static string col1 {get;set;}   
 public static string col2 {get;set;}  
  public static string col3 {get;set;}   
 //etc for every column

}

最初の行を MyClass のプロパティに読み込みます

次に、ワークシートのすべての行を次のようなリストに読み込みます。

List<string> myList = new IList<string>();

myList.append(anInstanceofMyClass);

データの行ごとに繰り返す

于 2012-10-11T19:21:10.290 に答える