2014-02-18 65 views
2

我有一個Excel工作表的問題。我想用c#創建一個Excel文件。Excel工作表獲取項目

此代碼的工作,並正常運行我的計算機上,但在其他計算機上的最後一行得到一個錯誤:

Excel.Application xlApp; 
Excel.Workbook xlWorkBook; 
Excel.Worksheet xlWorkSheetInvoice; 
Excel.Worksheet xlWorkSheetInvoiceLine; 

object misValue = System.Reflection.Missing.Value; 

xlApp = new Microsoft.Office.Interop.Excel.Application(); 
xlWorkBook = xlApp.Workbooks.Add(misValue); 

xlWorkSheetInvoice = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

xlWorkSheetInvoiceLine = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2); 

System.Runtime.InteropServices.COMException(0x8002000B):無效的指數。 (異常來自HRESULT:0x8002000B(DISP_E_BADINDEX)) 在Microsoft.Office.Interop.Excel.Sheets.get_Item(對象索引)

回答

0

DISP_E_BADINDEX似乎暗示的工作表的數量較少的其他計算機上。在使用get_Item()之前檢查工作表數量是否小於2。

1

我執行類似的代碼示例應用程序的計算機上使用Excel 2013,它在你提到的代碼相同的線路出現故障。默認情況下,Excel的應用2013開闢了一個工作表(「工作表Sheet1」),所以你必須修改相應

0

我已創建新的工作表,並分配xlWorkSheetInvoice和xlWorkSheetInvoiceLine來解決它的代碼。

var xlSheets = xlWorkBook.Sheets as Excel.Sheets; 
      var xlNewSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing); 
      var xlNewSheet2= (Excel.Worksheet)xlSheets.Add(xlSheets[2], Type.Missing, Type.Missing, Type.Missing); 
      xlWorkSheetInvoice = xlNewSheet; 
      xlWorkSheetInvoiceLine = xlNewSheet2; 
      xlWorkSheetInvoice = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
      xlWorkSheetInvoiceLine = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);