2013-09-25 109 views
2

我有下面的代碼位時,我的目標是能正常工作的.NET 3.5:問題與使用Office互操作與Excel和.NET 4.0/4.5

Microsoft.Office.Interop.Excel.Application _excelInstance; 
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet; 
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook; 

_excelInstance = new Microsoft.Office.Interop.Excel.Application(); 
_excelWorkbook = _excelInstance.Workbooks.Add(); 
_excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1); 

然而,當我面向.NET 4.5中,編譯器給出上面最後一行的以下錯誤:

無法找到編譯動態表達式所需的一個或多個類型。你錯過了一個參考嗎?

我無法針對此項目的.NET 3.5,它必須是4.0或4.5。

任何想法會造成這種情況,或者我應該如何解決這個問題?

謝謝。

編輯 -

這裏是entier類:

public class ExcelWriter : IDisposable 
{ 
    private string _outputFile; 

    public ExcelWriter(string outputFile) 
    { 
     _outputFile = outputFile; 
    } 

    public void Write(List<string[]> data) 
    { 
     Microsoft.Office.Interop.Excel.Application _excelInstance; 
     Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet; 
     Microsoft.Office.Interop.Excel.Workbook _excelWorkbook; 

     _excelInstance = new Microsoft.Office.Interop.Excel.Application(); 
     _excelWorkbook = _excelInstance.Workbooks.Add(); 
     _excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1); 

     int rowNumber = 1; 

     foreach (var row in data) 
     { 
      int columnNumber = 1; 

      foreach (var field in row) 
      { 
       _excelWorksheet.Cells[rowNumber, columnNumber] = field; 
       columnNumber++; 
      } 

      rowNumber++; 
     } 

     if (File.Exists(_outputFile)) 
     { 
      File.Delete(_outputFile); 
     } 

     _excelWorkbook.SaveAs(_outputFile); 
     _excelWorkbook.Close(); 
     _excelInstance.Quit(); 
    } 

    public void Dispose() 
    { 
     if (File.Exists(_outputFile)) 
     { 
      File.Delete(_outputFile); 
     } 
    } 
} 
+0

什麼版本的辦公室?我嘗試了14.0完全相同,並沒有得到框架4.5的編譯器錯誤。我使用的是Office 2010 – EkoostikMartin

+0

。 –

+0

所以它適用於我。一定有你在這裏離開的東西。請包括更多的細節(項目類型,你沒有顯示的其他代碼等)。我假設VS2012? – EkoostikMartin

回答

12

是,Excel類型庫將受到不同的,當你添加一個參考的Microsoft.Office.Interop.Excel互操作程序集時,翻譯你的目標是.NET 4.0以上。它將利用添加的動態關鍵字。在Office interop中有很多用途,它是一個在許多地方返回「變體」的對象模型。之前他們被翻譯爲對象,現在爲動態

這需要一個不屬於您的項目的框架組件。可能是因爲你從之前的VS版本轉換而來。

右鍵單擊項目的引用節點添加引用,選擇Microsoft.CSharp。

+0

太好了。這解決了這個問題。非常感謝你! –