Как удалить макросы из двоичных документов MS Office? - PullRequest
3 голосов
/ 04 сентября 2011

Как программно удалить макросы из двоичных документов Microsoft Office (doc, xls, ppt)?

I не хочу сделать это для XMLформат (xlsx, docx, pptx).

Я не хочу отключить макросы в офисе, я действительно хочу изменить файлы и удалить ихлюбых макросов.

1 Ответ

3 голосов
/ 08 ноября 2011

Предполагается, что вы хотите автоматизировать реальные приложения.

Добавить ссылки на:

Следующее должно избавить вас от кода макроса для 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).Он имеет большинство (если не все) двоичных структур для .doc, .xls и .ppt, сопоставленных с объектами C #.

Хотя b2xtranslator намерен перевести двоичные офисные документы в новый формат OpenXML, вы можете использовать библиотеку для анализа документов и удаления макроэлементов самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...