C#中使用Spire.docx操作Word文档
使用docx一段时间之后,一些地方还是不方便,然后就尝试寻找一种更加简便的方法。
之前有尝试过使用Npoi操作word表格,但是太烦人了,随后放弃,然后发现免费版本的spire不错,并且在莫种程度上比docx多一些实用的方法。
所以在此对自己摸索到的spire的一些方法,做一些简单的记录。
public void DOCXcreat3()
{
try
{ Document document = new Document();
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph();
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center; //获取第一个Section对象
Section sec = document.Sections[0];
//设置纸张大小
//sec.PageSetup.PageSize = PageSize.Letter;
//分别设置四个方向的页边距
sec.PageSetup.Margins.Top = 70f;
sec.PageSetup.Margins.Left = 50f;
sec.PageSetup.Margins.Bottom = 60f;
sec.PageSetup.Margins.Right = 50f; TextRange rangeTop = paragraph.AppendText("水平鉴定仪");
section.AddParagraph(); paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
rangeTop.CharacterFormat.Bold = true;
rangeTop.CharacterFormat.FontName = "Arial";
rangeTop.CharacterFormat.FontSize = 20;
//rangeTop.CharacterFormat.Position = 30;是整个字符块的高度 //初始化一个Table类对象,并添加第一个table(24行7列)
Table table1 = section.AddTable(true);
table1.ResetCells(24, 7);
//table1.Width = 100%;
//这里是设置表格的整体样式
//table1.ApplyStyle(DefaultTableStyle.LightGridAccent3); //第一行
table1.Rows[0].Height = 40;
table1.ApplyHorizontalMerge(0, 0, 2);
table1.ApplyHorizontalMerge(0, 3, 6); //注意TextRange和Paragraph的不同点。
Paragraph paragraph1 = table1.Rows[0].Cells[0].AddParagraph();
TextRange range1 = paragraph1.AppendText("设备ID:" + "18635445");
range1.CharacterFormat.FontName = "Arial";
range1.CharacterFormat.FontSize = 16; Paragraph paragraph2 = table1.Rows[0].Cells[3].AddParagraph();
TextRange range2 = paragraph2.AppendText("仪器编号:" + "FH5919");
range2.CharacterFormat.FontName = "Arial";
range2.CharacterFormat.FontSize = 16; //垂直居中
table1.Rows[0].Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
table1.Rows[0].Cells[3].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
//水平居中
paragraph1.Format.HorizontalAlignment = HorizontalAlignment.Center;
paragraph2.Format.HorizontalAlignment = HorizontalAlignment.Center; string[] subtitle = new string[7] { "标准角值", "盘左Ⅰ","盘左Ⅱ","盘右Ⅰ","盘右Ⅱ","平均","差值"};
//第二行
for (int n = 0; n < 7; n++) {
Paragraph paraRow2 = table1.Rows[1].Cells[n].AddParagraph();
paraRow2.AppendText(subtitle[n]);
paraRow2.Format.HorizontalAlignment = HorizontalAlignment.Center; } //此处是将单元格分割,获取额外的单元格
//table1.Rows[1].Cells[6].SplitCell(2, 1);
//table1.Rows[1].Cells[6].Width = 10; //在这里从数据记录中循环读取
for (int i = 0; i < 20; i++)
{
table1.Rows[i + 2].Height = 20;
for (int j = 0; j < 7; j++) {
Paragraph para = table1.Rows[i + 2].Cells[j].AddParagraph();
TextRange rowsContent = para.AppendText("{你你你");
rowsContent.CharacterFormat.FontName = "Arial";
//rowsContent.CharacterFormat.FontSize = 15;
para.Format.HorizontalAlignment = HorizontalAlignment.Center;
}
} //可替换为[records + 1]
table1.Rows[22].Height = 36;
table1.ApplyHorizontalMerge(22, 0, 6);
Paragraph paraLast = table1.Rows[22].Cells[0].AddParagraph();
paraLast.AppendText("归零后计算结果");
paraLast.Format.HorizontalAlignment = HorizontalAlignment.Center; table1.Rows[23].Height = 36;
table1.ApplyHorizontalMerge(23, 0, 6);
Paragraph paraLast2 = table1.Rows[23].Cells[0].AddParagraph();
paraLast2.Format.HorizontalAlignment = HorizontalAlignment.Center;
paraLast2.AppendText("23.0"); for (int i = 1; i < 24; i++) {
for (int j = 0; j < 7; j++) {
table1.Rows[i].Cells[j].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
}
} //保存并运行文件
string filePath = "D:\\测试文档\\";
document.SaveToFile(filePath + "Sample2.docx", FileFormat.Docx); }
catch (Exception e)
{
Console.WriteLine(e); }
}
上方的代码编译之后如图:

一些基本的方法可以去看代码,都有相应的注释。
然后先一些基本的需要注意的操作进行总结:
与Docx一样的是,spire也是通过对document的操作实现word的具体设置。不过Spire中要比Docx多section这么一个中间层,在section的基础上进行对cell或者paragraph的操作。
添加新的表格也要在section才可以新增table。
其余的具体的操作其实也大同小异,可以类比。不过需要区分Textrange和Paragraph各自不同的属性。
还需要注意spire的合并单元格的方法格式(row, start,end)。而且合并之后的单元格计数,就是按start为准,这一点和Docx中合并之后单元格从0开始计数就不一样了。
//横向合并:
table1.Rows[0].Height = 40;
table1.ApplyHorizontalMerge(0, 0, 2);
table1.ApplyHorizontalMerge(0, 3, 6);
//纵向合并:合并第一列第3、4个单元格
table1.ApplyVerticalMerge(0, 2, 3);
然后其他的方法与功能,暂时我就没有用到了,如果以后深入使用的话,会持续的更新,如果有错误,也请提出来,我会及时改正的。
这里是一片大佬写的很全面的文章:
https://www.cnblogs.com/Yesi/p/4280949.html
C#中使用Spire.docx操作Word文档的更多相关文章
- C#使用Docx操作word文档
C#使用Docx编写word表格 最近接手了一个小Demo,要求使用Docx,将Xml文件中的数据转换为word文档,组织数据形成表格. 写了已经一周,网络上的知识太零碎,就想自己先统计整理出来,方便 ...
- 利用POI操作不同版本号word文档中的图片以及创建word文档
我们都知道要想利用java对office操作最经常使用的技术就应该是POI了,在这里本人就不多说到底POI是什么和怎么用了. 先说本人遇到的问题,不同于利用POI去向word文档以及excel文档去写 ...
- iText操作word文档总结
操作word文档的工具有很多,除了iText之外还有POI,但是POI擅长的功能是操作excel,虽然也可以操作word,但是能力有限,而且还有很多的bug,技术并不成熟,下面就重点介绍一种操作wor ...
- C#操作Word文档(加密、解密、对应书签插入分页符)
原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- C#开源组件DocX处理Word文档基本操作(二)
上一篇 C#开源组件DocX处理Word文档基本操作(一) 介绍了DocX的段落.表格及图片的处理,本篇介绍页眉页脚的处理. 示例代码所用DocX版本为:1.3.0.0.关于版本的区别,请参见上篇,而 ...
- 2.QT中操作word文档
Qt/Windows桌面版提供了ActiveQt框架,用以为Qt和ActiveX提供完美结合.ActiveQt由两个模块组成: A QAxContainer模块允许我们使用COM对象并且可以 ...
- c#中操作word文档-四、对象模型
转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
随机推荐
- ubuntu下交叉编译mono
环境:ubuntu16.04 wget download.mono-project.com/sources/mono/mono-4.8.1.0.tar.bz2 配置: CC=arm-linux-you ...
- JavaScript 时间格式
方法1: Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), //日 = ...
- JavaScript new return 类的实例化
new初始化方法 简单没有return的就不写了 function Person() { this.name="hongda"; ; return "fffffff&qu ...
- 【第四章】 springboot + swagger
注:本文参考自 http://www.jianshu.com/p/0465a2b837d2 swagger用于定义API文档. 好处: 前后端分离开发 API文档非常明确 测试的时候不需要再使用URL ...
- UVa 820 因特网带宽(最大流)
https://vjudge.net/problem/UVA-820 题意: 给出所有计算机之间的路径和路径容量后求出两个给定结点之间的流通总容量. 思路: 裸的最大流问题.注意有个比较坑的地方,最后 ...
- java工程师
java工程师 职位描述 1.参与产品后台需求和产品经理确定: 2.主导产品后台架构设计和前端通讯协议: 3.设计后台的架构,能支持大的并发量: 4.优化后台的性能,能保证接口的流畅性: 5.负责解决 ...
- SqlParameter 参数化模糊查询
sql += " and a.f_fullName like N'%'+@fullName+'%'";
- Hibernate 由实体类与配置文件的配置关系生成数据库中的表
import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class ...
- xtu 1242 Yada Number 打表
Yada Number Time Limit : 2000 MS Memory Limit : 65536 KB Yada Number Problem Description: ...
- c++ 二分法查找(binary_search)
#include <iostream> // cout #include <algorithm> // binary_search, sort #include <vec ...