2011-03-31 54 views
1

错误CS0266:不能将类型'object'隐式转换为'Microsoft.Office.Interop.Excel.Range'。一个显式转换存在(是否缺少强制转换?)无法将类型'object'隐式转换为'Microsoft.Office.Interop.Excel.Range'

请帮助:)

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

你试过了range =(Range)xlWorkSheet.UsedRange.Columns [1,Type.Missing]; ? – Damb 2011-03-31 06:45:02

回答

5

Columns索引键入返回object和可变range键入到Excel.Range。这种转换是不合法的(一种不太具体的类型到更具体的类型)。您需要显式转换的结果进行转换工作

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

我认为这个问题是在这一行:

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

它可能返回的对象,所以你必须将它转换为Excel.Range

1

仅当Microsoft.Office.Interop.Excel的Embed Interop类型设置为false时才会出现此异常。如果它被设置为true,那么你就不会得到这个异常

0

这将解决这个问题:

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

刚刚尝试这一点。希望对你有效。

相关问题