2010-10-27 12 views
1

J'utilise C# et Visual Studio pour extraire des données d'une feuille Excel, les mettre dans un tableau (en ajoutant des virgules à la fin de chaque chaîne) et puis le sortir dans un fichier .CSV.Extraction des données d'Excel à l'aide de Interop - Ignore certaines cellules où aucune donnée n'est contenue

Maintenant, j'ai rencontré un problème qui se produit lorsqu'une cellule n'a aucune donnée, ou pas les données attendues (c'est-à-dire une image).

Je suppose que c'est sur l'extrémité de lecture de la feuille d'Excel, plutôt que la sortie à. CSV comme quand j'obtiens cette erreur, je ne reçois aucune donnée mise dans le tableau.

Voici un extrait du code que j'utilise qui a été adapté à partir d'un exemple de Microsoft sur l'accès aux données Excel à l'aide de l'interopérabilité.

//Get a range of data. 
      range = objSheet.get_Range(ranges1, ranges2); 

      //Retrieve the data from the range. 
      Object[,] saRet; 
      saRet = (System.Object[,])range.get_Value(Missing.Value); 

      //Determine the dimensions of the array. 
      long iRows; 
      long iCols; 
      iRows = saRet.GetUpperBound(0); 
      iCols = saRet.GetUpperBound(1); 

      //Build a string that contains the data of the array. 
      String valueString; 
      valueString = "Prices"; 

      System.IO.StreamWriter OutWrite = new System.IO.StreamWriter("h:\\out.csv"); 

      for (long rowCounter = 1; rowCounter <= iRows; rowCounter++) 
      { 
       for (long colCounter = 1; colCounter <= iCols; colCounter++) 
       { 

        //Write the next value into the string. 
        valueString = String.Concat(valueString, 
         saRet[rowCounter, colCounter].ToString() + ", "); 
       } 


       //Write in a new line. 
       valueString = String.Concat(valueString, "\n"); 


      } 

L'erreur que je reçois est de faire avec la ligne System.Object est:

Erreur: Référence d'objet non définie à une instance d'un objet, Ligne: WindowsFormApplication2

(No I Je n'ai pas encore réussi à renommer mon projet: P)

Cheers, Andy.

Répondre

0

Cette ligne est dangereuse:

valueString = String.Concat(valueString, saRet[rowCounter, colCounter].ToString() + ", "); 

... à la suite de saRet[rowCounter, colCounter] pourrait être nul. Si une chaîne vide est acceptable pour une cellule vide, utilisez Convert.ToString(), qui interprétera sous forme de chaînes vides nulls:

valueString = String.Concat(valueString, Convert.ToString(saRet[rowCounter, colCounter]) + ", "); 

Je soupçonne que c'est la raison pour laquelle vous obtenez le NullReferenceException.

+0

Cela m'a certainement donné beaucoup plus de données sensibles et a évité l'erreur. Merci beaucoup! – Andy