2017-06-29 75 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(); 

      } 

感谢。

相关问题