在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")
Excel互操作程序集属性“Embed Interop Types”是否设置为True? – PaulF
@PaulF是的。 – MrVimes
我试着搜索问题签名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