如何以编程方式从二进制Microsoft Office文档中删除宏(doc
,xls
,ppt
)?
我不希望为XML格式(xlsx
,docx
,pptx
)执行此操作。
我不想在办公室中禁用宏,我真的想修改文件并删除它们的任何宏。
答案 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格式,但您可以使用该库来解析文档并自行删除宏元素。