我如何从Excel工作簿中去除macros?

我目前被迫使用Office Live / Skydrive(不pipe名字是什么)编辑Excel工作簿。 Skydrive不会让我上传一个包含macros的工作簿,而且我不需要这些macros,所以我想在C#中编写一个简单的清理应用程序,简单地删除所有的macros。 如何使用Excel 2007及更高版本(.xlsm)文件来解决这个问题?

编辑:基本上,我想打开一个xlsm文件,并将其保存为一个xlsx文件,而不需要安装Excel,即通过OpenXML SDK什么的。

我没有时间检查OpenXML SDK文档中的数千页,但是您可以尝试如下所示:

.xlsm文件是主要包含XML文件的ZIP压缩文件。 您需要从xl\_rels文件夹中的workbook.xml.rels文件中删除对macros的引用。 这是一个示例:

 <?xml version="1.0" encoding="UTF-8" standalone="true"?> <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> <Relationship Target="worksheets/sheet3.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId3"/> <Relationship Target="worksheets/sheet2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId2"/> <Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"/> <Relationship Target="vbaProject.bin" Type="http://schemas.microsoft.com/office/2006/relationships/vbaProject" Id="rId6"/> <Relationship Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Id="rId5"/> <Relationship Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Id="rId4"/> </Relationships> 

这是你需要删除的typeshttp://schemas.microsoft.com/office/2006/relationships/vbaProjecttypes的关系。 关系中引用的文件也应从ZIP存档中删除。 在这种情况下,该文件被命名为vbaProject.bin并被放置在xl文件夹中。

使用OpenXML SDK,您应该能够浏览Excel文件的逻辑结构并执行这种清理,而无需了解ZIP归档的确切结构。 但是,检查Excel文件就好像它是一个ZIP归档文件,仍然可以帮助您理解文件的结构。

你可以尝试的一件事就是改变你正在接收的文件的文件types,如以前的答案中所解释的。 在这里可以find传入ChangeDocumentType方法的可用选项。

我不完全确定这将剥离所有的macros内容,但如果你不能从你的用户得到一个.xlsx文件,它值得一试。

使用openXML SDK 2.0 ,这对我有用 :

 SpreadsheetDocument document = SpreadsheetDocument.Open("excelFile.xlsm", true); document.WorkbookPart.DeletePart(document.WorkbookPart.VbaProjectPart); document.Dispose();