2016-05-23 6 views
0

Ich muss eine Zeile aus einer Excel-Datei extrahieren und in einem Array speichern. Ich habe den folgenden Code geschrieben. Aber das scheint kein guter Code zu sein, da die Ausführungszeit drastisch zunimmt, wenn die Anzahl der Spalten zunimmt. Gibt es einen besseren Weg?Eine Excel-Tabellenzeile in ein Array extrahieren

public static System.Array eEPlueExtractOneRowDataAgainstTSAndTCIDFromAnExcelSheet(string fullExcelFilePath, string excelSheetName, string testScenarioId, string testCaseId) 
    { 
     //Define variables 
     System.Array myArray = null; 

     //Define the excel file 
     FileInfo desiredExcelFile = new FileInfo(fullExcelFilePath); 


     //Manipulate Excel file using EPPlus 
     ExcelPackage excelPkg = new ExcelPackage(desiredExcelFile); 
     ExcelWorksheet workSheet = excelPkg.Workbook.Worksheets[excelSheetName]; 
     int totalRows = workSheet.Dimension.End.Row; 
     int totalColums = workSheet.Dimension.End.Column; 
     Console.WriteLine("Total Rows & Colums - " + totalRows + ":" + totalColums); 
     Console.WriteLine(""); 


     for (int i = 1; i <= totalRows; i++) 
     { 
      if ((workSheet.Cells[i, 1].Value.ToString() == testScenarioId) && (workSheet.Cells[i, 2].Value.ToString() == testCaseId)) 
      { 
       //Console.Write("Desired Row is: " + i); 
       myArray = new string[totalColums]; 
       for (int j = 1; j < totalColums; j++) 
       { 
        myArray.SetValue(workSheet.Cells[i, j].Value.ToString(), (j - 1)); 
       } 
      } 
     } 


     return myArray; 
    } 

Ich möchte es nicht mit Microsoft.Office.Interop.Excel tun. Ich habe EPPlus verwenden

+0

Sie könnten dies auf http://codereview.stackexchange.com/ –

+0

veröffentlichen Hat jede Zeile eine TestszenarioId? Sind diese IDs sortiert? – rene

+0

Ja, jede Zeile hat TestScenarioID als Muss. Tatsächlich werden die IDs selbst aus einem anderen Excel-Sheet extrahiert und in dieser Funktion verwendet. (Extrahieren von scenarioIds, die aus einem Blatt ausgeführt werden müssen, und Extrahieren von Daten gegen diese IDs aus einem anderen Blatt) – oshirwani

Antwort

0

Es gibt nicht viel Sie tun können, außer früh Rettung, wenn Sie Ihre Zeile gefunden haben und vielleicht verhindern, dass zu viele Zeichenfolgen in der if-Anweisung zu erstellen:

for (int i = 1; i <= totalRows; i++) 
{ 
    if (testScenarioId.Equals(workSheet.Cells[i, 1].Value) && 
     testCaseId.Equals(workSheet.Cells[i, 2].Value)) 
    { 
     //Console.Write("Desired Row is: " + i); 
     myArray = new string[totalColums]; 
     for (int j = 1; j < totalColums; j++) 
     { 
      myArray.SetValue(workSheet.Cells[i, j].Value.ToString(), (j - 1)); 
     } 
     // stop iterating the for loop 
     break; 
    } 
} 

Wenn die Werte in Entweder column1 oder column2 werden sortiert, Sie implementieren eine BinarySearch, aber wenn die Daten nicht sortiert werden und Sie das sortierte Ergebnis nicht irgendwo speichern können, ist es nutzlos, es zuerst zu sortieren.

Verwandte Themen