使用 C# 删除 Excel 宏文件

Strip Excel file of Macros with C#

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

我不知道 Excel 文件中宏的位置,所以我不确定这是否能完成任务。那么,这行得通吗?将工作表从一个文件复制到另一个文件会去掉它的宏,还是它们实际上存储在工作表级别?

一如既往,欢迎任何和所有建议,包括替代建议甚至 "why are you even doing this???"。 :)

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

这将去除宏并且很健壮。如果 VBA 被锁定以供查看,它也会起作用。

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

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

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

如果您需要使用 C# 来执行此操作,我同意将源 Excel 文件加载到 C# 并创建一个新的目标文件,只复制单元格和 sheet你需要的。特别是如果你对大量 excel 文件执行此操作,我建议只创建一个小型控制台应用程序,当给定 excel sheet 时,它会自动生成一个新的 excel sheet 只为您提供数据。

我发现对此类任务非常有用且易于使用的一个工具是 EPPlus