我目前被迫使用Office Live/Skydrive(无论是否有正确的名称)来编辑Excel工作簿。 Skydrive不会让我上传包含宏的工作簿,而且我不需要这些宏,所以我想在C#中编写一个简洁的应用程序,它只是删除所有的宏。我如何使用Excel 2007及更高版本(.xlsm)文件解决此问题?如何从Excel工作簿中去除宏?
编辑:基本上,我想打开一个xlsm文档并将其保存为一个xlsx文档,而不需要安装Excel,即通过OpenXML SDK或其他东西。
我目前被迫使用Office Live/Skydrive(无论是否有正确的名称)来编辑Excel工作簿。 Skydrive不会让我上传包含宏的工作簿,而且我不需要这些宏,所以我想在C#中编写一个简洁的应用程序,它只是删除所有的宏。我如何使用Excel 2007及更高版本(.xlsm)文件解决此问题?如何从Excel工作簿中去除宏?
编辑:基本上,我想打开一个xlsm文档并将其保存为一个xlsx文档,而不需要安装Excel,即通过OpenXML SDK或其他东西。
我没有时间来检查的OpenXML的SDK文档中的网页成千上万,但你可以尝试这样的:
的.xlsm
文件为主要包含XML文件的ZIP压缩文件。您需要从xl\_rels
文件夹中的workbook.xml.rels
文件中删除对宏的引用。以下是一个示例:
<?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>
这是您需要删除的类型http://schemas.microsoft.com/office/2006/relationships/vbaProject
的关系。关系中引用的文件也应从ZIP存档中删除。在这种情况下,该文件被命名为vbaProject.bin
,并放置在xl
文件夹中。
使用OpenXML SDK,您应该能够浏览Excel文件的逻辑结构并执行这种清理,而无需了解ZIP归档的确切结构。但是,检查Excel文件就好像它是一个ZIP归档文件,仍然可以帮助您理解文件的结构。
随着openXML SDK 2.0,这个工作对我来说:
SpreadsheetDocument document = SpreadsheetDocument.Open("excelFile.xlsm", true);
document.WorkbookPart.DeletePart(document.WorkbookPart.VbaProjectPart);
document.Dispose();
的.xlsx文件没有宏 –
@大卫,是啊,谢谢。我最近没有太多的xlsx/m曝光,没有办公室。也许它会更容易为用户发送一个xlsx文档,然后它将不会有宏。 – ProfK