首先,对于上下文,我是软件开发公司自动化团队的安置学生,所以我帮助开发日常构建的自动化测试程序。
我的直线经理制作了一份excel文件,用于展示我们测试环境的结果。我们的测试在hyper-V服务器上的虚拟PC上运行。
我希望能够使用每个测试环境中的测试结果更新此excel文档,但我不确定应该如何执行此操作。
每个虚拟PC都运行自动化程序(C#.NET 4.0),并且当前将测试日志和结果文件复制到我们的构建计算机上的共享文件夹,每个人都可以访问该文件夹。
所以我希望自动化程序运行它的测试,然后当它完成时,我希望它用测试结果写入excel文档中的表。有没有人以编程方式修改excel文档的经验?我还应该注意,excel文档将存储在远程虚拟PC上的共享文件夹中(可从测试环境访问)
该表将包含构建名称/日期,环境详细信息,测试类型和测试结果等。
我已收集此信息并将其显示在HTML文件中 - 但每个测试环境都有一个单独的HTML文件。这样做的目的是使结果都在一个地方(excel文档将负责以图形和图表的形式在表格中呈现数据)。
所以,我需要知道的是如何从.NET程序写入excel文档中的表。似乎有不同的方法这样做(正如我在网上研究时发现的那样),所以我想问一下stackoverflow看看谁知道最好的方法来做这件事。)
答案 0 :(得分:6)
我使用并且对EPPlus http://epplus.codeplex.com/感到满意,可以解析,编辑和创建xlsx文件。
答案 1 :(得分:2)
确实有很多方法。您可以使用OLEDB,也可以使用互操作(查看get_Range()
和ListObjects["table_name"].DataBodyRange
)。
当我被迫基于模板创建Excel文件时,我使用了XML地图 - 它非常方便非常。将xsd绑定到工作簿后,只需将xml加载到其中,Excel就会将数据放入正确的单元格中。 (如果您需要一个示例,只需发表评论,我将用它更新答案。)
但我个人同意mj82。如果您可以避免写入Excel文件 - 请避免使用它。您可以将表(2003年的“列表”)绑定到某个外部数据源,并在打开时将工作簿设置为自动更新。如果在您的环境中可能是最佳解决方案。
更新: 要使用xml映射将数据推送到Excel工作簿,请执行以下步骤
创建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 help中所述将单元格映射到元素。
然后在你的代码中: 使用xml数据创建一个字符串。 (我使用了类型化的DataSet,所以我只调用了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);
就是这样。希望这会有所帮助。
答案 2 :(得分:1)
查看this。
希望得到这个帮助。
答案 3 :(得分:0)
OfficeWriter是另一个第三方库,用于以编程方式使用XLS / XLSX(和Word)。它已经成熟,现在版本为8.0。