2017-09-15 3 views
0

かなり大きなExcelスプレッドシートで作業しています。データを操作するための最も簡単な方法を探しています。スプレッドシートには31の列と15,000の行があります。私は約15列の情報を抽出する必要があります。この多くのデータを扱う際のベストプラクティスはありますか?私はどのような種類のデータベース(SQLなど)も使用できません。大きなスプレッドシートの検索、並べ替え、保存

リストやディクショナリを作成し、セルの値をカラムに基づいて独自のリスト/ディクショナリに入れて、それを反復することを考えましたが、どれほど高速かどうか、試してみる価値があるかどうかはわかりません。

List<string> columnOne = new List<string>(); 

foreach(DatagridViewColumn Column in DatagridView2.Column) 
{ 
    if (Column[0].Value.toString().Contains("lastName") 
    { 
     foreach(DatagridViewRow row in DatagridView2.Rows) 
     { 
      columnOne.add(row.Value.toString()); 
     } 
    } 
} 

ご提供いただけるヘルプやガイダンスは大変ありがとうございます。

答えて

3

データの1行を表すクラスを定義し、そのクラスインスタンスのリストを最初に定義します。

これは、列のあなたの全体の集合である、のは、言ってみましょう:

姓|姓電話| DOB |アドレス|国籍|年齢|

そして、あなたはFirstNameLastName、およびDOBで唯一興味を持っていること。

だから私はそうのようなクラスを定義します

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime DOB { get; set; } 
} 

は、そのクラスのインスタンスのリストを作成します。

private List<Person> people = new List<Person>(); 

次に、最初に列を反復処理する代わりに、そのループ内で行を反復処理する代わりに、別の方法で処理します。

foreach(DatagridViewRow row in DatagridView2.Rows) 
{ 
    Person p = new Person(); 
    p.FirstName = row[0]; 
    p.LastName = row[1]; 
    p.DOB = row[3]; 
    people.Add(p); 
} 

明らかに、上記は擬似コードの一種であり、コンパイルされません。アイデアを示すだけです。これは、別々の列のための別々のリストを作成するのではなく、1つの行に関連するデータをリストの1つの項目として持つという大きな利点があります。この場合、後で関連するデータを見つけるために余分な長さに移動する必要があります。

関連する問題