2017-10-13 4 views
0

Je cherche un moyen d'importer certains éléments d'une feuille Excel dans une liste. Mon but est de pouvoir trier les attributs (première ligne) de la feuille Excel (cliquez sur l'attribut que je veux voir) et d'obtenir les valeurs des lignes sous la première ligne.Importer des lignes Excel, des colonnes dans la liste

+1

Avez-vous ajouté Excel comme référence? – BugFinder

+1

Copie possible de [Je reçois le "manquant une directive d'utilisation ou référence d'assemblage" et aucune idée de ce qui ne va pas] (https://stackoverflow.com/questions/17344295/im-getting-the-missing-a-using -directive-or-assembly-reference-and-no-indice-wh) – SeM

+0

Vous n'avez pas besoin d'écrire 'Excel.Sheets'. Vous avez déjà utilisé la directive 'Excel', alors écrivez simplement' Sheet' qui est une interface. Ou sinon, vous pouvez utiliser la classe concrète 'Worksheet'. – praty

Répondre

0

Je mettrais en œuvre ce que vous voulez de cette façon sans utiliser Sheet Interface mais Worksheet objet de classe. Une chose à noter est que je ferme la feuille d'Excel après avoir obtenu toute la gamme utilisée dans le tableau de 2-d. Cela rend la lecture plus rapide, sinon la lecture sera beaucoup plus lente. Il pourrait y avoir beaucoup de façons de le rendre encore plus rapide.

Application xlApp = new Application(); 
Workbook xlWorkBook = null; 
Worksheet dataSheet = null; 
Range dataRange = null; 
List<string> columnNames = new List<string>(); 
object[,] valueArray; 

try 
{ 
    // Open the excel file 
    xlWorkBook = xlApp.Workbooks.Open(fileFullPath, 0, true); 

    if (xlWorkBook.Worksheets != null 
     && xlWorkBook.Worksheets.Count > 0) 
    { 
     // Get the first data sheet 
     dataSheet = xlWorkBook.Worksheets[1]; 

     // Get range of data in the worksheet 
     dataRange = dataSheet.UsedRange; 

     // Read all data from data range in the worksheet 
     valueArray = (object[,])dataRange.get_Value(XlRangeValueDataType.xlRangeValueDefault); 

     if (xlWorkBook != null) 
     { 
      // Close the workbook after job is done 
      xlWorkBook.Close(); 
      xlApp.Quit(); 
     } 

     for (int colIndex = 0; colIndex < valueArray.GetLength(1); colIndex++) 
     { 
      if (valueArray[0, colIndex] != null 
       && !string.IsNullOrEmpty(valueArray[0, colIndex].ToString())) 
      { 
       // Get name of all columns in the first sheet 
       columnNames.Add(valueArray[0, colIndex].ToString()); 
      } 
     } 
    } 

    // Now you have column names or to say first row values in this: 
    // columnNames - list of strings 
} 
catch (System.Exception generalException) 
{ 
    if (xlWorkBook != null) 
    { 
     // Close the workbook after job is done 
     xlWorkBook.Close(); 
     xlApp.Quit(); 
    } 
} 
+0

Celui-là est vraiment sympa. Solution courte et correspondante :) Merci encore pour votre aide! – Niclas

+0

J'ai donc essayé votre code aujourd'hui. J'obtiens une exception car le programme va dans le dernier if() {} avant le catch() {}. Je ne reçois pas le problème. Je pense que cela a quelque chose à voir avec la condition. – Niclas

+0

Quel est le message d'exception @Niclas? Serait-ce parce que 'valueArray' est vide? Que voyez-vous dans 'valueArray' lors du débogage? – praty