# C#中怎么利用OpenXML操作Word文档 ## 一、OpenXML简介 OpenXML是由微软推出的开放标准格式(ISO/IEC 29500),用于表示Word(.docx)、Excel(.xlsx)和PowerPoint(.pptx)文档。通过System.IO.Packaging和DocumentFormat.OpenXml命名空间,开发者可以直接操作文档的XML结构,实现高性能的文档处理。 ### 核心优势 - 无需安装Office套件 - 服务器端高效处理 - 精确控制文档元素 - 支持批量操作 ## 二、环境准备 1. 安装NuGet包: ```bash Install-Package DocumentFormat.OpenXml
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing;
public static void CreateWordDocument(string filepath) { using (WordprocessingDocument doc = WordprocessingDocument.Create(filepath, WordprocessingDocumentType.Document)) { // 添加主文档部分 MainDocumentPart mainPart = doc.AddMainDocumentPart(); mainPart.Document = new Document(); // 创建文档结构 Body body = new Body(); Paragraph paragraph = new Paragraph(); Run run = new Run(); // 添加文本内容 run.AppendChild(new Text("Hello OpenXML!")); paragraph.AppendChild(run); body.AppendChild(paragraph); mainPart.Document.AppendChild(body); mainPart.Document.Save(); } }
public static string ReadWordDocument(string filepath) { using (WordprocessingDocument doc = WordprocessingDocument.Open(filepath, false)) { MainDocumentPart mainPart = doc.MainDocumentPart; Body body = mainPart.Document.Body; return body.InnerText; } }
// 创建加粗文本 RunProperties runProperties = new RunProperties( new Bold(), new FontSize() { Val = "24" } ); Run run = new Run(runProperties); run.AppendChild(new Text("加粗文本"));
Table table = new Table( new TableRow( new TableCell(new Paragraph(new Run(new Text("单元格1")))), new TableCell(new Paragraph(new Run(new Text("单元格2")))) ); // 设置表格边框 TableProperties props = new TableProperties( new TableBorders( new TopBorder() { Val = BorderValues.Single }, new BottomBorder() { Val = BorderValues.Single } ) ); table.AppendChild(props);
public static void InsertImage(string docPath, string imagePath) { using (WordprocessingDocument doc = WordprocessingDocument.Open(docPath, true)) { MainDocumentPart mainPart = doc.MainDocumentPart; ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); using (FileStream stream = new FileStream(imagePath, FileMode.Open)) { imagePart.FeedData(stream); } var element = new Drawing( new DW.Inline( new DW.Extent() { Cx = 990000L, Cy = 792000L }, new DW.EffectExtent() { LeftEdge = 0L, TopEdge = 0L }, new DW.DocProperties() { Id = 1U, Name = "Picture 1" }, new DW.NonVisualGraphicFrameDrawingProperties( new A.GraphicFrameLocks() { NoChangeAspect = true }), new A.Graphic( new A.GraphicData( new PIC.Picture( new PIC.NonVisualPictureProperties( new PIC.NonVisualDrawingProperties() { Id = 0U, Name = "New Image.jpg" }), new PIC.BlipFill( new A.Blip() { Embed = mainPart.GetIdOfPart(imagePart) }, new A.Stretch(new A.FillRectangle())), new PIC.ShapeProperties( new A.Transform2D( new A.Offset() { X = 0L, Y = 0L }, new A.Extents() { Cx = 990000L, Cy = 792000L }), new A.PresetGeometry( new A.AdjustValueList()) { Preset = A.ShapeTypeValues.Rectangle })) ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }) ) { DistanceFromTop = 0U, DistanceFromBottom = 0U, DistanceFromLeft = 0U, DistanceFromRight = 0U }); mainPart.Document.Body.AppendChild(new Paragraph(new Run(element))); } }
using (OpenXmlWriter writer = OpenXmlWriter.Create(mainPart)) { writer.WriteStartElement(new Body()); // 批量写入内容... writer.WriteEndElement(); }
OpenSettings { AutoSave = false }
using (FileStream fs = new FileStream("output.docx", FileMode.Create)) { using (ZipArchive zip = new ZipArchive(fs, ZipArchiveMode.Create)) { // 手动构建压缩包结构... } }
通过OpenXML操作Word文档虽然学习曲线较陡,但提供了极高的灵活性和性能优势。本文介绍了从基础操作到高级功能的完整流程,建议开发者结合官方文档和SDK工具进行深入实践。随着.NET生态的发展,OpenXML将继续成为服务端文档处理的首选方案。 “`
(全文约1580字,实际字数可能因代码格式略有浮动)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。