Comment puis-je supprimer les macros d'un classur Excel?

Je suis actuellement obligé d'utiliser Office Live / Skydrive (quel que soit le nom propre) pour modifier les classurs Excel. Skydrive ne me permettra pas de download un classur contenant des macros, et je n'ai pas besoin des macros, alors j'aimerais écrire une petite application de nettoyage en C # qui supprime simplement toutes les macros. Comment puis-je aborder cela en utilisant les documents Excel 2007 et ci-dessus (.xlsm)?

EDIT: Fondamentalement, j'aimerais ouvrir un document xlsm et l'save en tant que document xlsx, sans que Excel requirejs soit installé, c'est-à-dire via le SDK OpenXML ou quelque chose.

Je n'ai pas eu le time de vérifier les milliers de pages dans la documentation du logiciel OpenXML SDK, mais vous pouvez essayer quelque chose comme ceci:

Le file .xlsm est une archive ZIP contenant principalement des files XML. Vous devez supprimer les references aux macros du file xl\_rels dossier xl\_rels . Voici un exemple:

 <?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> 

C'est la relation de type http://schemas.microsoft.com/office/2006/relationships/vbaProject vous devez supprimer. Le file référencé dans la relation devrait également être supprimé de l'archive ZIP. Dans ce cas, le file s'appelle vbaProject.bin et est placé dans le dossier xl .

À l'aide du SDK OpenXML, vous devriez pouvoir naviguer dans la structure logique du file Excel et effectuer ce type de nettoyage sans comprendre la structure exacte de l'archive ZIP. Toutefois, l'inspection du file Excel comme s'il s'agissait d'une archive ZIP peut encore être utile pour comprendre la structure du file.

Une chose que vous pouvez essayer est de modifier le type de document du file que vous recevez comme expliqué dans une réponse précédente. Les options disponibles pour passer à la méthode ChangeDocumentType se trouvent ici .

Je ne suis pas totalement sûr que cela enlèvera tout le contenu de la macro, mais ça vaut le coup si vous ne parvenez pas à get un file .xlsx de votre user.

Avec openXML SDK 2.0 , cela a fonctionné pour moi:

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