完全可行,且是微软官方推荐的无office依赖方案——必须用documentformat.openxml而非interop,因后者依赖本地office进程,而前者纯操作zip+xml,支持服务器、docker及linux;需通过nuget引用v3.x包,注意word表格操作易崩的三点及ppt模板替换文本的正确方式。

完全可行,而且是微软官方推荐的无Office依赖方案——但必须用 DocumentFormat.OpenXml,不是 Microsoft.Office.Interop。
为什么不能用 Interop,而必须用 Open XML SDK
Interop 本质是调用本地安装的 Office 进程(比如 WINWORD.EXE),没装 Office 就直接抛 COMException;Open XML SDK 则纯操作 ZIP+XML,连注册表都不碰。服务器、Docker、Linux(.NET 6+)全支持,但得注意:它只处理 .docx/.xlsx/.pptx(即 Office Open XML 格式),不支持老式 .doc/.xls。
- Interop 在无桌面环境(如 Windows Server Core、Azure App Service)会卡死或崩溃
- Open XML SDK 不需要 COM 注册、不弹 UI、不占用 Office 许可证
- SDK v2.5+ 支持 .NET Standard 2.0,.NET 5/6/7/8 原生兼容
安装和基础引用怎么配才不踩坑
别搜 “Open XML SDK” 下载安装包——那是旧版(v2.5 及以前),只支持 .NET Framework。现在应该用 NuGet 包 DocumentFormat.OpenXml(v3.x),它才是跨平台主力。
- 项目里执行:
dotnet add package DocumentFormat.OpenXml - 别同时引用
WindowsBase或PresentationCore(WPF 相关),它们在 Linux 上会引发TypeLoadException - Excel 操作需额外加
System.IO.Packaging(.NET 6+ 已内置,不用手动加)
示例:创建空白 .xlsx
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using (var doc = SpreadsheetDocument.Create("test.xlsx", SpreadsheetDocumentType.Workbook)) {
var workbookPart = doc.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
var worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
var sheets = workbookPart.Workbook.Append(new Sheets());
sheets.Append(new Sheet() { Name = "Sheet1", SheetId = 1, Id = workbookPart.GetIdOfPart(worksheetPart) });
}
读写 Word 表格时最容易崩的三个点
Word 的 Table 结构嵌套深,直接改 TableRow 容易漏掉 TableCell 的 TableCellProperties,导致文件损坏打不开。
- 插入新行前,必须复制原
TableRow的全部子元素(包括TableRowProperties),不能只 cloneTableCell - 修改文字内容,务必用
Run+Text,别直接赋值给Paragraph.InnerText(会丢格式) - 保存前调用
document.MainDocumentPart.Document.Save(),否则改动不落盘——这个方法名太隐蔽,很多人漏掉
PowerPoint 模板替换文本为什么总失败
因为占位符(如 «Title»)通常藏在 TextBody 的多层 Run 里,且可能被拆成几个 Text 节点。暴力 string.Replace 会破坏 XML 结构。
- 必须遍历所有
Run→Text,拼接出完整文本再判断是否匹配占位符 - 替换后要重建
Run和Text,不能直接改Text.Text属性(某些版本会忽略) - 记得清空原
Run子节点再插入新Text,否则残留空节点触发 Office 报错"The file is corrupt and cannot be opened"
Open XML 看似只是“解压改 XML”,但每个文档部件(HeaderPart、FooterPart、NumberingDefinitionsPart)都有隐式依赖,漏处理一个就可能让 Word 打开时自动修复并丢内容。动手前先用 OpenXmlSdkTool.exe(SDK 自带)打开样本文件看看结构,比硬猜强得多。










