使用 C# 剥离宏的 Excel 文件

本文关键字:Excel 文件 剥离 使用 | 更新日期: 2023-09-27 17:55:48

我被要求去除Excel文件中的宏,只留下数据。我被要求通过将 Excel 文件转换为 XML,然后使用 C# 将该文件读回 Excel 来执行此操作。这对我来说似乎有点低效,我认为简单地将源 Excel 文件加载到 C# 中,然后创建一个新的目标 Excel 文件并将源中的工作表添加回目标会更容易。

我不知道宏在 Excel 文件中的位置,所以我不确定这是否会完成任务。那么,这会起作用吗?简单地将工作表从一个文件复制到另一个文件是否会剥离它的宏,或者它们实际上存储在工作表级别?

与往常一样,欢迎任何和所有建议,包括替代建议,甚至是"你为什么要这样做???:)"。

使用 C# 剥离宏的 Excel 文件

若要以编程方式执行此操作,可以使用 C# 中 .NET 中的 System.IO.Compression 库中的 ZipFile 类。(.NET Framework 4.5)

重命名文件以添加".zip"扩展名,然后将文件作为 ZIP 存档打开。在生成的"xl"文件夹中查找一个名为"vbproject.bin"的元素,然后将其删除。删除.zip扩展。宏消失了。

最好的办法是将工作簿另存为 xlsx,将其关闭,打开,然后另存为您选择的格式。

这将剥离宏并且是健壮的。如果 VBA 被锁定以供查看,它也将起作用。

必须关闭并重新打开工作簿,否则将保留宏。

如果您需要使用 C# 来执行此操作,我同意将源 Excel 文件加载到 C# 中并创建一个新的目标文件只会复制您需要的单元格和工作表会更容易。特别是如果您正在为大量 excel 文件执行此操作,我建议您只创建一个小型控制台应用程序,当给定 Excel 工作表时,该应用程序将自动生成一个新的 Excel 工作表,仅包含您的数据。

我发现一个非常有用且易于使用的工具是EPPlus。