如何使用C#在Word OpenXML中创建文本框?代码报错求助
解决OpenXML创建Word文本框导致文档损坏的问题
你的代码直接将TextBox元素添加到文档Body中,这不符合OpenXML的文档结构规范,Word无法正确解析这种结构,所以会提示文档损坏。要正确创建文本框,需要将TextBox嵌套在Drawing元素内,并补充必要的布局属性。
以下是修正后的完整代码:
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Wordprocessing; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Drawing.Wordprocessing; using System.IO; // ... 方法内部代码 using (MemoryStream memory = new MemoryStream()) { using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(memory, WordprocessingDocumentType.Document, true)) { MainDocumentPart mainPart = wordDocument.AddMainDocumentPart(); mainPart.Document = new Document(); Body docBody = new Body(); // 创建文本框内的内容段落 Paragraph textPara = new Paragraph( new Run( new Text("test") ) ); // 构建文本框所需的完整嵌套结构 Drawing drawing = new Drawing( new DW.Inline( new DW.Extent() { Cx = 4572000, Cy = 1524000 }, // 文本框尺寸:宽150px、高50px(1px=30480 EMU单位) new DW.EffectExtent() { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L }, new DW.DocProperties() { Id = (UInt32Value)1U, Name = "TextBox 1" }, new DW.NonVisualGraphicFrameDrawingProperties( new A.GraphicFrameLocks() { NoChangeAspect = true } ), new A.Graphic( new A.GraphicData( new TextBox( new TextBoxContent(textPara) ) ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/textBox" } ) ) { DistanceFromTop = 0U, DistanceFromBottom = 0U, DistanceFromLeft = 190500U, DistanceFromRight = 0U } ); // 将绘图元素包裹进段落,再添加到文档主体 docBody.Append(new Paragraph(new Run(drawing))); mainPart.Document.Append(docBody); wordDocument.Save(); } return new MemoryStream(memory.ToArray()); }
关键修正点说明:
- 结构嵌套要求:
TextBox必须放在A.GraphicData内,再依次嵌套A.Graphic、DW.Inline、Drawing元素,最终通过Run和Paragraph添加到文档Body,这是Word能识别的合法结构。 - 布局属性:
DW.Extent定义文本框的大小(使用EMU单位,1像素=30480 EMU);DW.Inline中的DistanceFromLeft等属性控制文本框相对于段落的偏移位置。 - 命名空间依赖:需要引用
DocumentFormat.OpenXml.Drawing(简称A)和DocumentFormat.OpenXml.Drawing.Wordprocessing(简称DW)命名空间,对应OpenXML中绘图相关的元素集合。
内容的提问来源于stack exchange,提问作者Vasile Mihai
相关产品推荐
相关产品推荐

