使用WordprocessingDocument.CreateFromTemplate生成损坏Word文件的问题
解决方案
核心原因
- 文档类型不匹配:未指定目标文档类型时,
CreateFromTemplate会沿用原.dotm的宏启用模板类型,直接保存为docx会导致内部格式标识与扩展名冲突 - 宏部件残留:.dotm模板包含宏相关部件(如
vbaProject.bin),docx格式不允许存在这些部件,Word检测到后判定文件损坏
修复代码
using (WordprocessingDocument doc = WordprocessingDocument.CreateFromTemplate( templatePath, WordprocessingDocumentType.Document)) // 明确指定生成普通docx文档 { // 删除所有宏相关部件 doc.DeletePartsOfType<VbaProjectPart>(); doc.DeletePartsOfType<CustomizationPart>(); // 禁用文档的宏设置(确保无宏标识) var settingsPart = doc.MainDocumentPart?.SettingsPart; if (settingsPart != null) { var macroSettings = settingsPart.Settings.Descendants<MacroSettings>().FirstOrDefault(); if (macroSettings != null) { macroSettings.Val = OnOffValues.Off; settingsPart.Save(); } } doc.SaveAs(newFileName); }
验证要点
- 生成的docx文件大小应与手动双击模板生成的空白文件接近(约16KB)
- 打开时无报错,模板中的非宏元素(如样式、内容控件)会被正常保留
内容的提问来源于stack exchange,提问作者deku
相关产品推荐
相关产品推荐

