2010-12-20 2 views
2

Ich habe eine Konsolenanwendung erstellt, die aus einer Excel-Datei liest. Ich möchte alle Dokumentennummern aufnehmen und für Suchzwecke in ein Array einfügen. Ich bin in der Lage, die Zelle zu finden, die die Daten "DocumentNumber" enthält, z. $ F $ 5. Wie kann ich durch Zeilen innerhalb der Spalte F iterieren? Ich habe den folgenden Code:Wie durchläuft man eine Spalte in einer Excel-Anwendung über die C# -Konsole?

public static void Main(string[] args) 
    { 
     string address; 
     string next; 
     try 
     { 
      Excel.ApplicationClass excel = new Excel.ApplicationClass(); 
      Excel.Workbook workbook = excel.Workbooks.Open(@"D:\sample.xls", Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
       Missing.Value, Missing.Value); 
      Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["Sheet1"]; 
      Excel.Range docNumber = worksheet.Cells.Find("DocumentNumber", worksheet.Cells[1, 1], Excel.XlFindLookIn.xlValues, 
       Excel.XlLookAt.xlPart, Missing.Value, Excel.XlSearchDirection.xlNext, 
       false, Missing.Value, Missing.Value); 

      if(docNumber != null){ 
       address = docNumber.get_Address(true, true, Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value); 
       Console.WriteLine(address); 

      } 
     } 
     catch (Exception err) 
     { 
      Console.WriteLine(err.Message); 
     } 
    } 

Vielen Dank im Voraus.

+0

hier verwenden Sie "missing.value", es bedeutet? –

Antwort

1

freundlich this.It iteriert durch jedes einzelne Zeilen und Spalten suchen.

string address; 
string next; 

try { 
    Excel.ApplicationClass excel = new Excel.ApplicationClass(); 
    object Missing = Type.Missing; 
    FileInfo fInfo = new FileInfo(@"D:\sample.xls"); 

    if(fInfo.Exists) { 
     Excel.Workbook workbook = excel.Workbooks.Open(@"D:\sample.xls", Missing, Missing, 
        Missing, Missing, Missing, Missing, Missing, 
        Missing, Missing, Missing, Missing, Missing, 
        Missing, Missing);  
     Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Sheets["Sheet1"]; 
     Excel.Range docNumber = worksheet.Cells.Find("DDEC", worksheet.Cells[1, 1], 
     Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Missing, Excel.XlSearchDirection.xlNext, false, Missing, Missing);  

     if(docNumber != null) { 
      address = docNumber.get_Address(true, true, Excel.XlReferenceStyle.xlA1, Missing, Missing); 
      docNumber = worksheet.UsedRange;       

      for (int rCnt = 1; rCnt <= docNumber.Rows.Count; rCnt++) { 
       for (int cCnt = 1; cCnt <= docNumber.Columns.Count; cCnt++) { 
        string str = (string)(docNumber.Cells[rCnt, cCnt] as Excel.Range).Value2; 
        MessageBox.Show(str); 
       } 
      } 
      Console.WriteLine(address); 
     }  
    } 
} 
+0

Hallo Rajesh, ich habe gerade deine Antwort gelesen. Und es funktioniert für mich. Vielen Dank. :) – janejanejane

1

Wäre es nicht einfacher, die Daten mit OLEDB zu lesen? Cleaner-Syntax, dann können Sie eine DataTable, die zurückgegeben wird.

+0

Hi Maw, die Geschäftsanforderungen haben sich geändert und meine erste Lösung funktioniert nicht mehr. Die Excel-Datei hat keine Spaltenüberschriften als das, was ich mir vorgestellt habe. Stattdessen werden die Header weit in der Mitte der Datei festgelegt. Wie kann ich das lösen? – janejanejane

+0

Wie kann ich wählen * aus [Blatt1 $] wo Spalte = L? – janejanejane

+0

@janejanejane - Die Spaltenüberschriften sind in der Mitte der Datei !! Das wird die Dinge viel schwieriger machen. Weißt du, was die Spalten im voraus sind? – MAW74656