C#中处理Word文档,是大部分程序猿绕不过的一道门。小公司或一般人员会选择使用开源组件。目前网络上出现的帖子,大部分是NPOI与DocX,其它的也有。不啰嗦了,将要使用DocX的基本方法贴出来,供参考。

经过亲测,DocX版本1.3.0.0比较稳定,基本功能使用正常(包括图片,表格,正文及页眉页脚等),建议大家选择该版本。目前为止(2020-01-23)官方最新版本为1.5.0.0,但其图片功能有问题(最先测试,其它就没深入了解了)。所以,若没有特别说明,代码中涉及的DocX版本为1.3.0.0。

DocX下载安装,有两种方式。一是开源官网下载,网址是:http://docx.codeplex.com/ ;二是在VS中使用NuGet,打开NuGet管理,查找DocX,即可看到可安装版本。当然,为了使用DocX组件,你的系统需要安装.NET框架4.0和Visual Studio 2010或更高版本。

DocX按版本不同,命名空间不一样。在1.1.0.0之前,使用 using Novacode 方式;从1.1.0.0到1.3.0.0,使用 using Xceed.Words.NET 方式;从1.4.1.0起,有两个:using Xceed.Words.NET 和 using Xceed.Document.NET。

文档组成基本类似,也按段落、表格(行、列(段落))等方式,差别在使用时基本不考虑Run,要么是Append增加,要么是Insert插入,插入有文本插入与段落(表格)的之前、之后插入,如:InsertParagraphBeforeSelf 和 InsertTableAfterSelf 等方式。实际使用请自己理解体会,这不是太难的东西。

若DocX选择版本1.3.0.0后,基本上按网上的代码与使用贴,能够处理大部分常用的Word文档了。

再次强调,若无特别说明,DocX版本为:1.3.0.0,命名空间引用:using Xceed.Words.NET,DocX组件的文件名为:Xceed.Words.NET.Dll。

代码示例如下:

private void DocX_DocMainBody()
{
string currPath = System.AppDomain.CurrentDomain.BaseDirectory;
string docPath = Path.Combine(currPath, "DocxWord");
if (!Directory.Exists(docPath))
Directory.CreateDirectory(docPath);
string outFile = Path.Combine(docPath, string.Format("{0}.Docx", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
string picFile = Path.Combine(currPath, "_Word.jpg"); using (var document = File.Exists(outFile) ? DocX.Load(outFile) : DocX.Create(outFile))
{
Paragraph p1 = document.InsertParagraph();
p1.InsertText("[1这是首页 - 原始段落.]"); //当前插写(或在指定位置写入)
p1.Append("[2增加表格]");
Table tblAdd = p1.InsertTableAfterSelf(, ); //插入段落后
tblAdd.Design = TableDesign.TableGrid;
tblAdd.Rows[].Cells[].Paragraphs.First().Append("3增加的表格").Alignment = Alignment.center;
tblAdd.InsertParagraphAfterSelf("[4表格后增加段落]"); p1.InsertParagraphBeforeSelf("[5原始段落前插入新段落]").Append("[6增加的新文本]").Bold().InsertText(,"[7插入的新文本]"); Table tbl = p1.InsertTableBeforeSelf(, ); //插入段落前部
tbl.Design = TableDesign.LightShading;
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[8增加表格]");
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[9共6行3列]");
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[10第3列]");
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[11Cell10]");
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[12Cell11]");
tbl.Rows[].Cells[].Paragraphs.First().InsertText("[13Cell12]"); Paragraph p1_1 = p1.InsertParagraphBeforeSelf("[14原始段落前插入的段落. 本段落后插入表格]");
Table t_1 = p1_1.InsertTableAfterSelf(tblAdd); //先插入段落再在插入的段落之前插入表格
t_1.Rows[].Cells[].Paragraphs.First().InsertText("[15步骤14插入的表格]");
t_1.InsertRow().Cells[].Paragraphs.First().InsertText("[16增加一行]");
t_1.InsertRow().Cells[].Paragraphs.First().Append("[17在首行插入一行]"); Paragraph p1_2 = p1.InsertParagraphAfterSelf("[18原始段落后插入的段落。本段落后插入3段空段落]");
Paragraph p1_3 = p1_2.InsertParagraphAfterSelf("").InsertParagraphAfterSelf("").InsertParagraphAfterSelf(""); p1_3.InsertPageBreakAfterSelf(); //该段落之后插入换页符, 优先于同段落的表格插入 Paragraph p2 = document.InsertParagraph(); //插入新段落
p2 = p2.InsertParagraphAfterSelf("");
p2 = p2.Append("[19这是第二页.]"); //AppendLine: 会增加换行(先换行再写入文本), Append: 不会换行
p2 = p2.InsertParagraphAfterSelf("");
Table t_2 = p2.InsertParagraphBeforeSelf("[20测试InsertParagraphAfterSelf(\"\")即增加空段落行,本段落是InsertParagraphBeforeSelf在InsertParagraphAfterSelf(\"\")的段落行之前插入,接着在本段落前插入2行3列的表格]").InsertTableBeforeSelf(, );
t_2.Design = TableDesign.TableGrid; //TableDesign.None; Paragraph pPic = document.InsertParagraph("[21以下插入图片]", false);
var image = document.AddImage(picFile);
var picture = image.CreatePicture();
//picture.Rotation = 10; //旋转
picture.SetPictureShape(BasicShapes.cube);
picture.Height = ;
picture.Width = ;
document.InsertParagraph().AppendPicture(picture); document.Save(); //document.SaveAs(outFile);
MessageBox.Show(Path.GetFileName(outFile) + " 完成!"); } }

代码说明:以上代码中字串的[##打头的数字,是我测试处理时分析代码作用效果用。在最后生成的Word文档中,你从这些数字打头的段落或位置上,可以直接看到代码的作用,方便你初学时理解。

生成文档效果:

基本的使用就是这些,希望能帮到你。

下一篇介绍用DocX来处理页眉页脚

C#开源组件DocX处理Word文档基本操作(一)的更多相关文章

  1. C#开源组件DocX处理Word文档基本操作(二)

    上一篇 C#开源组件DocX处理Word文档基本操作(一) 介绍了DocX的段落.表格及图片的处理,本篇介绍页眉页脚的处理. 示例代码所用DocX版本为:1.3.0.0.关于版本的区别,请参见上篇,而 ...

  2. C#使用Docx操作word文档

    C#使用Docx编写word表格 最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格. 写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便 ...

  3. Docx 生成word文档二

    /// <summary> /// 生产word 文档 /// </summary> public class GenerateWord { /// <summary&g ...

  4. Docx 生成word文档

    1.生成word代码 /// <summary> /// 生成word文档 /// </summary> /// <param name="tempPath&q ...

  5. C#中使用Spire.docx操作Word文档

    使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法. 之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比 ...

  6. C# 复制一个Word文档的部分或全部内容到另一个Word文档

    C# 复制一个Word文档的部分或全部内容到另一个Word文档 我最近喜欢折腾Office软件相关的东西,想把很多Office软件提供的功能用.NET来实现,如果后期能把它用来开发一点我自己的小应用程 ...

  7. 打开和写入word文档

    一. 使用win32读取word内容 # -*- coding: utf-8 -*- from win32com import client as wc def readDocx2(): word = ...

  8. python自动化之word文档

    #########################docx文件############################ ''' .docx文件有很多结构,有3种不同的类型来表示 在最高一层,Docum ...

  9. 使用PHPWord生成word文档

    有时我们需要把网页内容保存为Word文档格式,以供其他人员查看和编辑.PHPWord是一个用纯PHP编写的库,使用PHPWord可以轻松处理word文档内容,生成你想要的word文档. 下载源码 安装 ...

随机推荐

  1. zm吃包子

    [题目背景]: zm 喜欢上了吃包子. [题面描述]: zm 每天都要去买包子,但是为了减肥,zm 设置了一系列规则来控制他每天买包子的数量. 他随机了 n 个特殊字符串,然后用 n 个字符串来衡量接 ...

  2. APICloud开发者进阶之路 |iOS修改entitlements文件

    本文出自APICloud官方论坛, 感谢论坛版主 技术咨询-Kenny 的分享.   一.概述iOS原生开发中若要实现某些特殊功能,如使用HealthKit.实现Universal Links等.需要 ...

  3. 倍增LCA模板

    //https://www.luogu.org/problemnew/show/P3379#include<bits/stdc++.h> #define maxn 500010 #defi ...

  4. 《Sequence Models》课堂笔记

    Lesson 5 Sequence Models 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第五门课程的课程笔记. 参考了其他人的笔记继续归纳的. 符号定义 假如我们想要建立一 ...

  5. 正斜杠(" / ")和反斜杠(" \ ")的区别

    反斜杠“\”是电脑出现了之后为了表示程序设计里的特殊含义才发明的专用标点.所以除了程序设计领域外,任何地方都不应该使用反斜杠. 如何区分正反斜杠 英语:"/" 英文是forward ...

  6. Java容器解析系列(11) HashMap 详解

    本篇我们来介绍一个最常用的Map结构--HashMap 关于HashMap,关于其基本原理,网上对其进行讲解的博客非常多,且很多都写的比较好,所以.... 这里直接贴上地址: 关于hash算法: Ha ...

  7. Linux基础:简介安装、常用命令和JDK、Mysql、Tomcat的安装

    一.Linux的简介 1.Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯 ...

  8. STL中的vector 和list

    参考书目:visual c++ 入门经典 第七版 Ivor Horton著 第十章 认识两个容器:vector和list 容器:是STL(Standard Template Library 标准模板库 ...

  9. Mavn 项目 引入第三方jar包 导致ClassNotFoundException

    案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...

  10. Ceph 存储集群5-数据归置

    一.数据归置概览 Ceph 通过 RADOS 集群动态地存储.复制和重新均衡数据对象.很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的 OSD 之上,所以 Ceph 的运营需要些 ...