2015-06-11 38 views
1

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

我不知道在哪里宏住在一个Excel文件里面,所以我不知道这是否会完成任务与否。那么,这会工作吗?只是简单地将表单从一个文件复制到另一个文件去掉它的宏,还是实际存储在工作表级别?

与往常一样,欢迎任何和所有建议,包括备用建议,甚至“为什么你甚至在做这个???”。 :)

+0

我只会使用Excel Interop将文件保存为.xlsx。复印工作表可能会丢失信息,如文件属性。 – Joe

+0

你只需要删除包含宏代码的嵌入式VBA项目,[这个问题](http://stackoverflow.com/questions/2948878/how-to-delete-vb-code-from-an-excel-sheet -using-c)可能会让你开始。 – stuartd

回答

1

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

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

关闭并重新打开工作簿是必要的,否则宏将被保留。

+0

这或多或少是我选择的解决方案。但是,它实际上并不允许我将.xlsm保存为.xlsx。我必须在将宏保存下来之前将其删除,否则会给我一个错误。 – EDanaII

1

要做到这一点编程,可以在.NET中使用zip文件类从System.IO.Compression图书馆从C#。 (.NET框架4.5)

重命名文件,添加对“.zip”扩展名,然后打开该文件为ZIP档案。在结果“xl”文件夹中查找名为“vbproject.bin”的元素,并将其删除。删除.zip扩展名。宏不见了。

0

如果你需要使用C#要做到这一点,我同意,这将是更容易地加载Excel文件到C#源,并创建一个新的目标文件只复制了你所需要的细胞和床单。特别是如果你为大量的excel文件做这个工作,我会建议创建一个小型的控制台应用程序,当给出一个excel工作表时,它会自动生成一个新的excel工作表,只有你的数据。我发现非常有用的,易于使用此类任务

一个工具是EPPlus