我如何从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/vbaProject
types的关系。 关系中引用的文件也应从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();