2011-02-08 9 views
6

Sto cercando di trovare le dimensioni di una tabella di Excel utilizzando C# trovando la prima cella null all'interno della prima colonna (che consiste di date) e la riga di intestazione.Impossibile eseguire l'associazione di runtime su un'eccezione di riferimento null

Ecco il codice che sto utilizzando in questo momento:

public static void findingTableBounds() 
    { 
     string dateCol = ""; 
     ArrayList dateColumn = new ArrayList(); 
     ArrayList numberOfColumns = new ArrayList(); 

     for (int column = 1; column < currentRow; column++) 
     { 
      dateCol = ((Excel.Range)workSheet.Cells[currentRow, 1]).Value2.ToString(); 
      if (dateCol != "") 
      { 
       dateColumn.Add(dateCol); 
       currentRow++; 
       totalRow++; 
       Console.WriteLine("Total Row: {0}", totalRow);    
      } 
      else 
      { 
       Console.WriteLine("Total Row: {0}", totalRow); 
       currentRow = 2; 
      } 
     } 

** Nota: V'è una parentesi di chiusura per questo metodo, non ho comprendono perché c'è un altro ciclo che fa la stessa identica cosa come il codice sopra ma solo per quante colonne ci sono.

L'errore si verifica in "dateCol = ((Excel.Range) workSheet.Cells [currentRow, 1]). Value2.ToString();" Sono abbastanza sicuro che succede perché sto cercando di assegnare un valore nullo (la cella) a dateCol (una stringa) quando la stringa è un tipo non annullabile. Purtroppo non sono sicuro di come risolvere il problema.

+3

I nomi delle variabili sembrano ... strani. 'colonna

risposta

9

Applicando un valore nullo in una stringa è fattibile, ma se ((Excel.Range)workSheet.Cells[currentRow, 1]).Value2 è nullo, allora non ha una funzione ToString() non è una funzione, in modo da cercare di eseguire non funziona. Dice che tipo di eccezione è? perché ci potrebbe essere un problema più grande ...

+0

Invisible Bob, L'eccezione completa è "Eccezione: impossibile eseguire l'associazione di runtime su un riferimento null". –

+0

Invisible Bob, Quando ho visto il tuo commento sulla funzione ToString() ho deciso di cambiare un po 'il codice. Ora "dateCol" è un doppio, e tutto quello che controllo è se il doppio == null e funziona. Non so ancora come controllare le celle con una stringa, quindi se riesci a pensare a una soluzione, la verificherò con il mio programma. Grazie, Jesse –

+0

Al fine di aiutare altre anime perse, ho alzato questo post e aggiungerò: 'if (((Excel.Range) workSheet.Cells [currentRow, 1]). Value2! = Null) {... } '. – Sylvain

1

Per quanto riguarda il post di cui sopra (non ho abbastanza fama di commentare su di esso)

Per il bene di aiutare altre anime perdute, ho alzato questo post e sarà sufficiente aggiungere:

if (((Excel.Range) workSheet.Cells [currentRow, 1]). Value2! = null) {...}.
- Sylvain 16 febbraio '15 alle 21:07

Ho avuto un problema e usato questo, ma ho trovato che, nel mio caso, almeno, l'ho cambiato a:

if (excelWorksheet.Cells[row, column].Value2 != null) 
{ 
    return ((Excel.Range)excelWorksheet.Cells[row, column]).Value2.ToString(); 
} 
return "No data"; 

che ha lavorato per il mio caso particolare, almeno. Avere la parte Excel.Range negli errori se creati.

Problemi correlati