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 ...
随机推荐
- myeclipse中文名字项目运行报错
今天由于项目进行分支,负责开发迭代的功能对应不同的分支项目,没想到的是分支项目名称加上了功能的中文名字.要使用了resin发布项目的时候,报了 java.io.CharConversionExcept ...
- vs2012旗舰版 有效注册密钥
Microsoft Visual Studio Ultimate 2012 旗舰版 有效注册密钥: YKCW6-BPFPF-BT8C9-7DCTH-QXGWC
- 【Android实验】第一个Android程序与Activity生命周期
目录 第一个Android程序和Activity生命周期 实验目的 实验要求 实验过程 1. 程序正常启动与关闭 2. 外来电话接入的情况 3. 外来短信接入的情况 4. 程序运行中切换到其他程序(比 ...
- 【Coursera】Security Introduction -Eighth Week(1)
Security Introduction People With Bad Intent 今天,Bob 向 Alice 发送了一条 "Hello,Allice!" 的信息,他们希望 ...
- 【TCP/IP详解 卷一:协议】第十章 动态选路协议
更为详细的RIP博客解析: RIP理论 距离向量算法的简介: RIP协议V-D算法的介绍 10.1 引言 静态选路修改路由表的三种方法 (1)主机设置时,默认的路由表项 (2)ICMP重定向报文(默认 ...
- css未知大小的图片居中
未知大小的图片在指定大小的div盒子中垂直水平居中: 无需要JS <style> .box { /*垂直居中*/ display: table-cell; vertical-align:m ...
- UVa 10201 Adventures in Moving - Part IV
https://vjudge.net/problem/UVA-10201 题意: 给出到达终点的距离和每个加油站的距离和油费,初始油箱里有100升油,计算到达终点时油箱内剩100升油所需的最少花费. ...
- MVC动态二级域名解析
动态二级域名的实现: 应用场景:目前产品要实现block功能,因为工作需要实现二级域名:www.{CompanyUrl}.xxx.com 假设产品主域名入口为:www.xxx.com 公司员工管理:w ...
- Qt4_WebKit_例子
1. 安装包:qt-opensource-windows-x86-vs2010-4.8.6.exe Qt4已经编译好的文件:E:\ZC_software_installDir\Qt_4.8.6\dem ...
- Hashtable、HashMap、TreeMap心得
三者均实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值. (1) 元素特性 HashTable中的key.value都不能为null; ...