2017-06-29 102 views
0

在C#應用程序中使用Microsoft Excel時,是否有一種優雅/直接的方式,而不受限於特定版本的Microsoft Excel?使用適用於C#應用程序開發的Excel版本

背景...

我在使用VBScript其中使用Microsoft Excel(如果已安裝)來自動生成Excel電子表格的過程中,過去編寫的腳本。 set xl = createObject("Excel.Application")

腳本無縫協同工作,無論哪個版本的Excel安裝在我的經驗/場景(我有Office 365與Excel 2016安裝在我的開發機器上,我的腳本在Microsoft Windows 2008 R2服務器上運行的運行Excel 2010的獨立副本)

我希望逐步進行一些工作,並開始開發完成相同工作的C#應用​​程序(winforms或控制檯)。我開發了一個測試應用程序,可以使用我的開發機器上安裝的excel版本。我需要的應用程序能夠運行Excel 2010

Project->Add Reference

COM

"Microsoft Excel 16.0 Object Library"

然後添加using語句在Windows Server 2008 R2服務器上運行... using Excel = Microsoft.Office.Interop.Excel;

然後一些基本的winforms測試代碼...

public Form1() 
    { 
     InitializeComponent(); 

     SimpleExcelTest(); 
    } 

    void SimpleExcelTest() { 

     Excel.Application xl = new Excel.Application(); 
     Excel.Workbook wb = xl.Workbooks.Add(); 
     Excel.Worksheet ws = wb.Worksheets[1]; 

     ws.Cells[1, 1] = "Testing"; 
     wb.SaveAs("C:\\temp\\test.xlsx"); 
     wb.Close(); 
    } 

哪個工作正常。

但是這引用了我的機器上運行的特定版本的Excel。這不會在目標機器上運行。該應用程序崩潰,出現以下錯誤...

問題簽名:

問題事件名稱:CLR20r3

問題簽名01:AutomatedReportGenerator.exe

問題簽名02:1.0.0.0

問題簽名03:59552369

問題簽名04:AutomatedReportGenerator

問題簽名05:1.0.0.0

問題簽名06:59552369

問題簽名07:2

問題簽名08:9C

問題簽名09 :PSZQOADHX1U5ZAHBHOHGHLDGIY4QIXHX

OS版本:6.1.7601.2.1.0.272。7

區域設置ID:2057

其他信息1:0a9e

其他信息2:0a9e372d3b4ad19135b953a78882e789

附加信息3:0a9e

附加信息4:0a9e372d3b4ad19135b953a78882e789

編輯:我會放入一個try catch來查看我是否可以捕獲更有用的錯誤消息,並嘗試使用兩個答案建議的庫,然後接受最早的答案。今天晚些時候。

是否有使用Excel在C#應用程序生成電子表格,無論安裝的是哪個的Excel版本的(只要它足夠近以與代碼兼容)

也許替代/更好的辦法C#相當於vbscript的set xl = createObject("Excel.Application")

+0

Excel互操作程序集屬性「Embed Interop Types」是否設置爲True? – PaulF

+0

@PaulF是的。 – MrVimes

+0

我試着搜索問題簽名09,因爲它非常獨特,並提出了幾個結果,包括這個 - 我不知道它是否會有所幫助:https://answers.microsoft.com/en-us/windows/forum/ windows_7-performance-i-am-trying-install-a-program-on-my-windows-7/917f70b9-2915-4662-a7dc-ac997312501b – PaulF

回答

1

嘗試使用EPPLus,它非常易於使用,並且提供了許多有用的功能,例如它處理單元格中的特殊字符等。您可以從http://epplus.codeplex.com/下載EPPlus。 EPPlus的Nuget頁面是https://www.nuget.org/packages/EPPlus

我不會推薦使用Microsoft Excel Interop,因爲它很複雜。

一個代碼示例是

using (ExcelPackage pck = new ExcelPackage(new FileInfo(fileName))) 
      { 
       ExcelWorksheet ws = pck.Workbook.Worksheets[excelSheetName]; 

       ws.Cells["A" + rowCnt].Value = firstName; 
       ws.Cells["B" + rowCnt].Value = lastName; 
       ws.Cells["C" + rowCnt].Value = occupation; 

       pck.Save(); 

      } 

感謝。

相關問題