使用可用版本的Excel进行C#app开发

时间:2017-06-29 16:02:25

标签: c# excel visual-studio-2017 excel-interop

是否有一种优雅/直接的方式在C#应用程序中使用Microsoft Excel,而不受限于特定版本的Microsoft 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的Windows Server 2008 R2服务器上运行。

Project->Add Reference

COM

"Microsoft Excel 16.0 Object Library"

然后添加using语句... 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

     

操作系统版本:6.1.7601.2.1.0.272.7

     

区域设置ID:2057

     

附加信息1:0a9e

     

其他资料2:0a9e372d3b4ad19135b953a78882e789

     

其他资料3:0a9e

     

其他资料4:0a9e372d3b4ad19135b953a78882e789

编辑:我会尝试捕获,看看是否可以捕获更有用的错误消息,并尝试两个答案建议的库然后接受最早的答案。今天晚些时候。

有没有替代/更好的方法在C#应用程序中使用Excel来生成电子表格,无论安装了哪个版本的excel(只要它最近足以与代码兼容)

也许是C#等同于vbscript' s set xl = createObject("Excel.Application")

2 个答案:

答案 0 :(得分:3)

您是否尝试过不使用Excel Interop并使用可以读取/写入格式的库? EPPlus是我无数次使用过的,它有很多功能:https://www.nuget.org/packages/EPPlus

答案 1 :(得分: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();

            }

感谢。