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