2013-03-26 4 views
6

私の現在のプロジェクトは、基本的にExcelスプレッドシートをWindowsアプリケーションに変換することです。私はテーブルとvlookupsを使用してワークシートのセクションに出くわしました。表は次のようになりますと仮定し(追加の行と正確にこののみ、四半期ごとのように最下部に追加):テーブル内から値を検索してデータを入力する正しい方法

enter image description here

私はC#でvlookupsを真似したいと私はしかし、いくつかの異なる方法を考えることができます私は「最良の」方法が何であるかを探しています。 「ベスト」とは、コード化が容易で、メンテナンスが容易であることを意味します。スピードが10秒以内であればスピードを意味するわけではありません。これはリージョン名とYr/Qrtが文字列として渡されるメソッドで起こります。これらを使用して、テーブルデータを格納するために使用するデータ構造と、最小限のコードでどのようにデータ構造を行う必要がありますか?

EDIT

は、私は今、私がこのデータを抽出される実際のエクセルファイルを受け取っています。 C#ので唯一の「yearQtr」フィールドとHRTCフィールドを取得する方法上の任意のアドバイスは大いに

をいただければ幸い編集

は、ちょうどこのアプリケーションを実行しているそれらのマシンは、Excelを持っていないことを発見しました。したがって、上記のファイルは、アプリケーションに読み込まれる前に別の形式に変更する必要があります(これはcsvまたはxmlなどの形式でExcelファイルを手動で保存することによって処理されます)。あなたはそれをこのように行うことが

+3

あなたは、各行のための '一覧'を持っている、と '辞書<文字列、リスト>' YR/QRT文字列をキーにそれらをすべて保存することができます。次に、特定のYr/Qrtの 'List 'を検索し、 'List 'にインデックスを使用して、必要な列を取得することができます。 –

+2

@HosseinNarimaniRad私は解決策を改善することに集中する人々を避けたいと思っていました。私のコードはうまくいきますが、問題を構築する最良の方法ではないと思います。 – jth41

+0

これは動的である必要がありますか?たとえば、常に4つの列しかありませんか?列の拡大/縮小が可能です。 – Derek

答えて

1

I:フォームで次に

public class MyClass 
{ 
    public List<string> columns; 
} 

は、あなたがこのように見上げる行うことができます現在このアーキテクチャソリューションを使用してデータニーズに対応しています。新しいテーブルは私がそれを必要とするたびに(私が質問で言ったように、速度は関係ありません)。表は、表ごとの特定の領域のみに適用されます。ご存じのように、私はExcelのデータ抽出部分をまだ理解していません。

class Table 
    { 
     Dictionary<String, double> _regionTimeValues; 
     String _region; 

     public Table(String region) 
     { 
      _regionTimeValues = new Dictionary<string, double>(); 
      _region = region; 
      suckInValues(); 
     } 

     private void suckInValues() 
     { 
      //Go find the File, get the appropriate Values 
      //for each value found 
     } 


     internal double locateRelevantValue(string yearQuarter) 
     { 
      double locatedValue = 0.0; 
      _regionTimeValues.TryGetValue(yearQuarter,out locatedValue); 
      return locatedValue; 

     } 
    } 
1

CSVまたはXMLのうち、上記のデータ:

List<MyClass> myValues; 

public List<MyClass> LookUp(string value, int columnIndex) 
{ 
    return this.myValues.Where(
        input => input.columns[columnIndex] == value 
          ).ToList();  
} 
関連する問題