2013-03-26 7 views
6

Mój obecny projekt to w zasadzie konwersja arkusza kalkulacyjnego Excela do aplikacji Windows. Natrafiłem na sekcję arkusza roboczego, korzystając ze stołu i widoków. Załóżmy, że stół wygląda następująco (dokładnie tak, jak to tylko każdego kwartału o dodatkowy wiersz dodany do dołu):Właściwy sposób wyszukiwania wartości z poziomu tabeli i wypełnienia go danymi

enter image description here

chcę naśladować vlookups w C# i mogę myśleć kilka różnych sposobów, jednak Szukam tego, co jest "najlepsze". Przez "najlepszy", mam na myśli najłatwiejszy do kodowania i najłatwiejszy w utrzymaniu, nie mam na myśli szybkości, jeśli działa w ciągu 10 sekund. dzieje się tak w metodzie, w której nazwa regionu i Yr/Qrt są przekazywane jako łańcuchy. Korzystając z nich, jakie struktury danych należy użyć do przechowywania danych w tabeli i jak mogę to zrobić w jak najmniejszej ilości kodu?

EDIT

Mam teraz otrzymaliśmy rzeczywista excel plik, który będę wydobycia to dane. Wszelkie porady, w jaki sposób dostać się tylko pola „yearQtr” oraz HRTC pola z C# byłoby bardzo mile widziane

Edit

właśnie odkryli, że ich maszyna działa ten program nie będzie miał Excel. Tak więc plik pokazany powyżej będzie musiał zostać zmieniony na inny format, zanim zostanie wczytany do aplikacji (będzie to obsługiwane przez ręczne zapisywanie pliku z programu Excel w formacie csv lub xml lub w dowolnym formacie.) Tak więc domyślam się, że moje pytanie brzmi: jak uzyskać wyżej opisane dane spośród CSV lub XML

+3

Można mieć '' Lista dla każdego wiersza i przechowywać je wszystkie w 'Dictionary >' włączył przez ciąg Yr/QRT. Następnie możesz wyszukać 'List ' dla określonego Yr/Qrt i użyć indeksu do 'Listy ', aby uzyskać żądaną kolumnę. –

+2

@HosseinNarimaniRad Mogłem, ale chcę uniknąć ludzi skupiających się na ulepszeniu mojej metody rozwiązania. Mój kod działa, ale nie sądzę, że jest to najlepszy sposób na rozwiązanie problemu. – jth41

+0

Czy to musi być dynamiczne? na przykład czy zawsze są tylko 4 kolumny? lub może to rozwinąć/zmniejszyć kolumny. – Derek

Odpowiedz

1

I Obecnie używam tego rozwiązania architektury do moich potrzeb danych nowy stół za każdym razem kiedy go potrzebuję (jak mówiłem w pytaniu, prędkość nie ma znaczenia). Tabela dotyczy tylko określonego regionu na tabelę. Jak możesz stwierdzić, nie znalazłem jeszcze części do ekstrakcji danych programu 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

może to zrobić w ten sposób:

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

Następnie w formularzu, można zrobić to spojrzeć tak:

List<MyClass> myValues; 

public List<MyClass> LookUp(string value, int columnIndex) 
{ 
    return this.myValues.Where(
        input => input.columns[columnIndex] == value 
          ).ToList();  
} 
Powiązane problemy