以编程方式更新Excel文档

首先,我是一个软件开发公司自动化团队的实习生,所以我帮助开发了我们日常生成的自动化testing程序。

我的直线经理制作了一个excel文档,用来展示我们testing环境的结果。 我们的testing运行在Hyper-V服务器上的虚拟PC上。

我希望能够从每个testing环境的testing结果更新这个Excel文档,但我不知道我应该如何去做这个。

每个虚拟PC运行一个自动化程序(C#.NET 4.0),并且当前将testing日志和结果文件复制到我们的生成机器上的共享文件夹,每个人都可以访问它。

所以我希望自动化程序能够运行它的testing,然后当它完成时,我想让它写入Excel文档中的testing结果表格。 有没有人有编程修改Excel文档的任何经验? 我还应该注意到,excel文档将被存储在远程虚拟PC上的共享文件夹中(可从testing环境访问)

该表将包含构build名称/date,环境详细信息,testingtypes和testing结果等。

我已经收集到这些信息,并将其显示在HTML文件中 – 但是每个testing环境都有一个单独的HTML文件。 这样做的目的是让结果全部在一个地方(Excel文档将以图表和图表的forms呈现数据)。

所以我真的需要知道的是如何在.NET程序的excel文档中写入表格。 这样做似乎有不同的方法(正如我在网上研究它时发现的那样),所以我想问一下stackoverflow,看看谁知道最好的方法来做到这一点)。

我使用EPPlus http://epplus.codeplex.com/来parsing,编辑和创buildxlsx文件。

这个问题帮了我: 从C#创buildExcel(.XLS和.XLSX)文件

确实有很多方法。 你可以使用OLEDB,或者你可以使用interop(查看get_Range()ListObjects["table_name"].DataBodyRange )。

当我被迫创build基于模板的Excel文件时,我使用了XML映射 – 这非常方便。 将xsd绑定到工作簿之后,只需将xml加载到工作簿中,Excel就会将数据放置到正确的单元格中。 (如果您需要示例,请留下评论,我会用它更新答案。)

但是我个人认同mj82。 如果你可以避免写入Excel文件 – 避免它。 您可以将表(2003年的“列表”)绑定到某个外部数据源,并将该工作簿设置为自动更新。 如果在您的环境中可能会是最好的解决scheme。

更新:要使用xml映射将数据推送到Excel工作簿,请按照下面的步骤操作

创build一个xml模式(xsd文件)。 例如:

 <?xml version="1.0" encoding="utf-8"?> <xs:schema id="BILLSTRINGS" targetNamespace="http://tempuri.org/BILLSTRINGS.xsd" elementFormDefault="qualified" xmlns="http://tempuri.org/BILLSTRINGS.xsd" xmlns:mstns="http://tempuri.org/BILLSTRINGS.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="BILLSTRINGS"> <xs:complexType> <xs:sequence> <xs:element name="STRINGS" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="ID_GOOD" type="xs:string" /> <xs:element name="NAME_GOOD" type="xs:string" /> <xs:element name="Quantity" type="xs:string" /> <xs:element name="Price" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 

打开工作簿,将xsd添加为映射,并将单元映射到ms帮助中所述的元素。

然后在你的代码中:用xml数据创build一个string。 (我使用了键入的DataSets,所以我只是叫GetXml。)打开工作簿,并将数据推送到Excel:

 using OExcel = Microsoft.Office.Interop.Excel; //... OExcel.Application app = new OExcel.ApplicationClass(); OExcel.Workbook wb = app.Workbooks.Open(filepath, false, false, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); wb.XmlMaps["MAPNAME"].ImportXml(string_with_xml); 

就这样。 希望这可以帮助。

看看这个 。

希望这个帮助。

OfficeWriter是用XLS / XLSX(和Word)以编程方式工作的另一个第三方库。 现在版本8.0已经成熟了。

http://www.officewriter.com