2011-03-31 2 views
1

Erreur CS0266: Impossible de convertir implicitement le type 'objet' en 'Microsoft.Office.Interop.Excel.Range'. Une conversion explicite existe (vous manque un casting?)Impossible de convertir le type 'objet' en 'Microsoft.Office.Interop.Excel.Range'

Pls aide :)

Excel.Application xlApp; 
    Excel.Workbook xlWorkBook; 
    Excel.Worksheet xlWorkSheet; 
    Excel.Range range; 

    xlApp = new Excel.Application(); 
    xlWorkBook = xlApp.Workbooks.Open("C:\\Base.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(3); 

    range= xlWorkSheet.UsedRange.Columns[1,Type.Missing]; 
+1

Avez-vous essayé range = (Range) xlWorkSheet.UsedRange.Columns [1, Type.Missing]; ? – Damb

Répondre

5

Le Columns indexeur est typé pour revenir object et la range variable est typée à Excel.Range. Cette conversion n'est pas légale (un type moins spécifique à un type plus spécifique). Vous devez jeter explicitement le résultat de faire le travail de conversion

range = (Excel.Range)(xlWorkSheet.UsedRange.Columns[1,Type.Missing]); 
1

Je pense que le problème est dans cette ligne:

xlWorkSheet.UsedRange.Columns[1,Type.Missing]; 

retourne probablement objet, vous devez le jeter aux Excel.Range

1

Vous obtenez cette exception uniquement si les types d'interopérabilité de Microsoft.Office.Interop.Excel sont définis sur false. Si elle est définie sur true, alors vous ne serez pas cette exception

0

Cela permettra de résoudre le problème:

Excel.Worksheet xlWorkSheet = (Excel.Worksheet)(xlWorkBook.Worksheets.get_Item(3)); 
Excel.Range range= (Excel.Range)(xlWorkSheet.UsedRange.Columns[1,Type.Missing]); 

Essayez ça. J'espère que ça marche pour toi.

Questions connexes