如何从二进制MS Office文档中删除宏?

时间:2011-09-04 11:09:03

标签: macros ms-office

如何以编程方式从二进制Microsoft Office文档中删除宏(docxlsppt)?

不希望为XML格式(xlsxdocxpptx)执行此操作。

想在办公室中禁用宏,我真的想修改文件并删除它们的任何宏。

1 个答案:

答案 0 :(得分:3)

这假设您要自动化实际应用程序。

添加对以下内容的引用:

以下内容应该删除Excel的宏代码。自动化Word和PowerPoint将是类似的。

using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
using PPT = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Vbe.Interop;

namespace OfficeMacros
{
    class Program
    {
        static void Main(string[] args)
        {
        }

        static void RemoveMacrosExcel(string fileName, string newFileName)
        {
            var excel = new Excel.Application();
            var workbook = excel.Workbooks.Open(fileName,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);

            foreach (VBComponent component in workbook.VBProject.VBComponents)
            {
                switch (component.Type)
                {
                    case (vbext_ComponentType.vbext_ct_StdModule):
                    case (vbext_ComponentType.vbext_ct_MSForm):
                    case (vbext_ComponentType.vbext_ct_ClassModule):
                        workbook.VBProject.VBComponents.Remove(component);
                        break;
                    default:
                        component.CodeModule.DeleteLines(1, component.CodeModule.CountOfLines);
                        break;
                }
            }

            workbook.Close(true, newFileName, Type.Missing);

            // Release variables
            workbook = null;
            excel = null;

            // Collect garbage
            GC.Collect();
        }
    }
}

如果您想自己解析二进制文件结构,则需要查看这些文档:

如果这看起来太令人生畏,那么DIaLOGIKa创建了一个名为b2xtranslator(Binary(doc,xls,ppt)的OpenXMLTranslator)的优秀库。它具有映射到C#对象的.doc,.xls和.ppt的大多数(如果不是全部)二进制结构。

虽然b2xtranslator的目的是将二进制office文档转换为较新的OpenXML格式,但您可以使用该库来解析文档并自行删除宏元素。