您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。