2016-05-23 7 views
0

Excelファイルから行を抽出して配列に格納する必要があります。私は次のコードを書いています。しかし、これはよいコードではないようです。実行時間が大幅に増加するのは、列の数が増えるほどです。もっと良い方法はありますか?シートの行をExcelに抽出する

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; 
    } 

私はMicrosoft.Office.Interop.Excelを使用してそれをしません。私はEPPlusを使用する必要が

+0

http://codereview.stackexchange.com/ –

+0

に投稿するとよいでしょう。各行にはtestscenarioIdがありますか?これらのIDはソートされていますか? – rene

+0

はい、各行にTestScenarioIDが必要です。実際には、ID自体が他のExcelシートから抽出され、この機能で使用されます。 (1つのシートから実行する必要のあるシナリオIDを抽出し、別のシートからそれらのIDに対してデータを抽出する) – oshirwani

答えて

0

ずっとあなたが行うことができ、あなたの行を見つけ、多分if文にあまりにも多くの文字列を作成防ぐいる初期のとき救済を除いてありません。

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; 
    } 
} 

値であればカラム1またはカラム2のいずれかをソートするとBinarySearchが実装されますが、データがソートされず、ソートされた結果をどこかに格納しておくことができない場合は、ソートを最初に行うのは無駄です。

関連する問題