利用Aspose.Word控件实现Word文档的操作

Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般使用Aspose.Cell来实现我想要的各种Excel报表输出。虽然一直也知道Aspose.Word是用来生成Word文档的,而且深信其也是一个很强大的控件,但一直没用用到,所以就不是很熟悉。

偶然一次机会,一个项目的报表功能指定需要导出为Word文档,因此寻找了很多篇文章,不过多数介绍的比较简单一点,于是也参考了官方的帮助介绍,终于满足了客户的需求。下面我由浅入深来介绍这个控件在实际业务中的使用过程吧。

1、二维表格的Word操作

日常中,常见的内容输出就是二维表格的方式,表头比较固定,内容每行一条,那么在实际的使用控件我们该如何操作呢,其实这个控件这方面介绍的文章很多,参考一下就能做出来了。其实介绍这个就是要说明书签的重要性,这个在Aspose.Cell控件也是如此,书签除了可以用来替换内容,还可以用来标记内容输入的开始位置等等功能。

首先我们在一个空白的Word文档中绘制一个表格头,然后再换行的开始插入一个标签引用,插入书签有两种方式,一种是在Word(2007、2010)的【插入】-【书签】中插入制定位置的书签引用,如下所示。

一种是在Word的自定义快速访问工具栏上添加其他命令,如下步骤所示

前者插入的书签是没有文字或者特别的标记,但是确实存在,后者会插入一个灰色块作为占位符,如下所示,我这这个二维表格的例子里面使用后者进行测试(两者同等效果的)

这样设计好Word模板后,下一步就是如何利用代码生成二维表格了。首先这里提示一下,就是我故意设置了每个表格单元格的宽度不同,所以也就要求生成的行要和头部对应,所以表格生成每行之前,肯定要获得对应列的样式属性的,否则就会对应不上了。下面看代码。

复制代码
try{Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);DataTable nameList = DataTableHelper.CreateTable("编号,姓名,时间");DataRow row = null;for (int i = 0; i < 50; i++){row = nameList.NewRow();row["编号"] = i.ToString().PadLeft(4, '0');row["姓名"] = "伍华聪 " + i.ToString();row["时间"] = DateTime.Now.ToString();nameList.Rows.Add(row);}List<double> widthList = new List<double>();for (int i = 0; i < nameList.Columns.Count; i++){builder.MoveToCell(0, 0, i, 0); //移动单元格double width = builder.CellFormat.Width;//获取单元格宽度widthList.Add(width);}                    builder.MoveToBookmark("table");        //开始添加值for (var i = 0; i < nameList.Rows.Count; i++){for (var j = 0; j < nameList.Columns.Count; j++){builder.InsertCell();// 添加一个单元格                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;builder.CellFormat.Width = widthList[j];builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐builder.Write(nameList.Rows[i][j].ToString());}builder.EndRow();}doc.Range.Bookmarks["table"].Text = "";    // 清掉标示  doc.Save(saveDocFile);if (MessageUtil.ShowYesNoAndTips("保存成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes){System.Diagnostics.Process.Start(saveDocFile);}}catch (Exception ex){LogHelper.Error(ex);MessageUtil.ShowError(ex.Message);return;}
复制代码

以上代码的步骤就是

1)创建Aspose.Words.Document 和 Aspose.Words.DocumentBuilder对象,然后生成数据的二维表格内容。

2)遍历模板表格,或者每一列的宽度,以备后用。

3)移动到表格的书签位置,然后开始录入数据,Word表格的每个Cell都要求制定样式和宽度,这样才能和表格头部吻合。

4)保存文件内容到新的文件里面即可。

输出的效果如下所示。

2、单元格合并的操作

常见的Word文件或者Excel文件中,都经常看到合并单元格的内容,因此这个部分也是非常常见的操作,必须掌握。

我们先看一个例子代码及效果。

复制代码
                try{Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);builder.InsertCell();builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;builder.CellFormat.VerticalMerge = CellMerge.First;builder.Write("Text in merged cells.");builder.InsertCell();builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;builder.CellFormat.VerticalMerge = CellMerge.None;builder.Write("Text in one cell");builder.EndRow();builder.InsertCell();builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;// This cell is vertically merged to the cell above and should be empty.builder.CellFormat.VerticalMerge = CellMerge.Previous;builder.InsertCell();builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;builder.CellFormat.VerticalMerge = CellMerge.None;builder.Write("Text in another cell");builder.EndRow();doc.Save(saveDocFile);if (MessageUtil.ShowYesNoAndTips("保存成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes){System.Diagnostics.Process.Start(saveDocFile);}}catch (Exception ex){LogHelper.Error(ex);MessageUtil.ShowError(ex.Message);return;}
复制代码

他的效果如下

关于合并单元格的介绍,你还可以参考下这篇官方介绍:http://www.aspose.com/docs/display/wordsnet/Working+with+Merged+Cells

如果上面的例子还不够明白,OK,我在介绍一个实际的例子,来说明合并单元格的操作模式。

实际文档生成如下所示:

文档的模板如下所示:

其实这个里面的“测试”内容是使用代码写入的,其实就是一行业务数据,用两行来展示,其中有些合并的单元格,这是一个实际项目的表格形式。我们注意到,每行有13个单元格,其中第一、第二、第十三列是合并列。和并列有一个特点,就是它的两个索引都有效,不过只是能使用第一个索引来对它进行操作复制,利用第二个没有用处的。

如第一个列是和并列,它应该有0、13这样的索引,第二列也是和并列,它也有1、14的索引,其他的类推。

了解这样的逻辑关系后,我们看实际操作的代码如下所示。

复制代码
                try{Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);List<double> widthList = new List<double>();for (int i = 0; i < 13; i++){builder.MoveToCell(0, 2, i, 0); //移动单元格double width = builder.CellFormat.Width;//获取单元格宽度widthList.Add(width);}builder.MoveToBookmark("table");        //开始添加值Table table = builder.StartTable();builder.RowFormat.HeadingFormat = true;builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;for (int j = 0; j < 26; j++){builder.InsertCell();// 添加一个单元格                    builder.CellFormat.Borders.LineStyle = LineStyle.Single;builder.CellFormat.Borders.Color = System.Drawing.Color.Black;int cellIndex = (j > 12) ? (j-13) : j; //位于第几个单元格builder.CellFormat.Width = widthList[cellIndex];builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//垂直居中对齐builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;//水平居中对齐builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;if (cellIndex == 0 || cellIndex == 1 || cellIndex == 12){if (j > 12){builder.CellFormat.VerticalMerge = CellMerge.Previous;}else{builder.CellFormat.VerticalMerge = CellMerge.First;}}builder.Write("测试" + j.ToString());if (cellIndex == 12 ){builder.EndRow();}}builder.EndTable();doc.Save(saveDocFile);if (MessageUtil.ShowYesNoAndTips("保存成功,是否打开文件?") == System.Windows.Forms.DialogResult.Yes){System.Diagnostics.Process.Start(saveDocFile);}}catch (Exception ex){LogHelper.Error(ex);MessageUtil.ShowError(ex.Message);return;}
复制代码

 

转载于:https://www.cnblogs.com/BrokenIce/p/5994994.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html编码自动识别,html实体编码遇上js代码

摘要&#xff1a; 在js中单、双引号引起来的是字符串&#xff0c;如果我们要在字符串中使用单、双引号&#xff0c;需要反斜杠进行转义。而如果字符串出现在html标签中&#xff0c;我们需要做转义处理。单双引号在js代码中在js中单、双引号引起来的是字符串&#xff0c;如果我们…

Activiti中具有单独数据库模式的多租户

我们过去听到的一项功能请求是以多租户方式运行Activiti引擎&#xff0c;使租户的数据与其他租户的数据隔离。 当然&#xff0c;在某些云/ SaaS环境中&#xff0c;这是必须的。 几个月前&#xff0c;波恩大学的学生拉斐尔吉伦&#xff08;Raphael Gielen&#xff09;与我接触&…

html5自动把某个层放在屏幕底部,告诉你一个将 footer 保持在底部的最好方法

当你在布局网页时&#xff0c;有可能会遇到类似下面的这种情况broken_layout.png导致这一问题的原因是页面内容太少&#xff0c;无法将内容区域撑开&#xff0c;从而在 footer 下面留下一大块空白。本文将介绍一种现代化的方法&#xff0c;&#xfffd;确保 footer 始终处于页面…

html的扇形代码导航,CSS3--利用transform和transition属性制作扇形导航

在前面&#xff0c;我们已经讲解了transform这个属性以及案例&#xff0c;那么本文会进一步结合transform和transition两个属性&#xff0c;并制作一个简单的案例进行说明。一、transition属性说明接下来简单分析一下transition这个属性的定义以及子属性。1)ansition-property …

常见的误解:这会创建多少个对象?

总览 一个常见的问题是一段代码创建多少个对象或多少个字符串。 答案通常不是您的想法&#xff0c;也不是您真正需要知道的。 了解何时创建对象是很有用的&#xff0c;但是有很多其他因素通常要考虑的重要得多&#xff0c;这可能意味着应用程序总数不是您所想的。 字符串不是一…

cvs配电保护断路器_电工电器(三)-配电电器-断路器类-剩余电流保护断路器

本文文字836&#xff0c;阅读时间6分钟左右。此系列文章 从配电电器的大类等进行慢慢阐述&#xff0c;有不足的地方 欢迎大家相互探讨交流。配电电器&#xff0c;顾名思义就是进行电力分配的设备。电&#xff0c;从发电机出来之后&#xff0c;由总线输出&#xff0c;不可能直接…

delhpi7 tcombobox清楚重复项_专利数据统计中需要搞清楚的首要问题(2)

上一篇专利数据统计中需要搞清楚的首要问题(1)介绍了通过合并申请号避免重复统计&#xff0c;理清了专利篇数和专利件数的问题&#xff0c;那么还有一类统计就是对发明项数的统计&#xff0c;这里就涉及到对同一项发明的重复统计问题。上一篇介绍的相同申请号但不同公开号的专利…

【Electron】Electron开发入门(八):自定义electron框架外壳(shell)的菜单(Menu)...

1.自定义electron框架外壳&#xff08;shell&#xff09;的菜单&#xff08;Menu&#xff09; electron的main.js里代码&#xff1a; const Menu require(electron).Menu; var template [{label: 关闭,click: function () { win.close();console.log("关闭")},// s…

交通大数据应用细分_盈海科技 | 交通大数据可视化“掘金”数据价值

面对日益拥堵的交通状况智能交通布局虽在不断完善但交通管理依旧收效甚微问题究竟出在了哪里&#xff1f;数据独立存储难以融合应用数据内在规律难寻数据可视化程度低……问题繁多 困难重重怎么办&#xff1f;&#xff1f;&#xff1f;交通大数据可视化解决方案上岗啦&#xff…

书评– Kubernetes Up&Running,作者:Kelsey Hightower

欢呼&#xff01; 正如我在以前的帖子中所写的那样&#xff0c;当您开始研究和使用所有这些新颖的&#xff0c;有光泽的容器/编排技术时&#xff0c;很有可能最终导致您的翻译“迷失”。 很多信息&#xff0c;很多技术&#xff0c;很多开发 &#xff0c;很多承诺&#xff0c;很…

MFC CListCtrl

列名、行内容的添加、删除。 据列名、行内容长度设置列宽。 排序。 提升权限 BOOL CDemoListCtrlApp::EnableDebugPrivilege() { HANDLE token; if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token)) { return FALSE; } TOKEN_PRIVILEGES tkp…

快手用旺旺瓶子做机器人_100品牌入榜,在快手的品牌运营怎么做?|11月快手品牌新势力榜揭晓...

11月榜单见证了许多新入驻快手的品牌迅速成长。母婴品牌「安慕斯」实现垂类专业场景剧情化&#xff0c;引起用户发注&#xff0c;激发用户参与&#xff0c;单月涨粉突破60万&#xff1b;服饰箱包运动垂类下的珠宝品牌「DR钻戒」以“一生唯一真爱”的理念抢占消费者心智&#xf…

认识计算机ppt课件游戏,《认识计算机》PPT课件

《认识计算机》PPT课件 认知主义认为 学习是个体对环 境的作用&#xff0c;而并不仅是环境刺激引起的行为改变&#xff1b;环境只能提供潜在刺激&#xff0c;至于这些潜在刺激是否受到注意或被加工&#xff0c;这主要取决于学习者内部的认知结构。 认 识 计 算 机 认知主义认为…

BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配

1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Status][Discuss]Description Input Output Sample Input 1 3 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0Sample Output ˆ ˆHINT 对于30% 的数据满足1 ≤ n ≤ 12。对于100% 的…

Apache Spark中实现的MapReduce设计模式

该博客是该系列文章的第一篇&#xff0c;讨论了MapReduce设计模式一书中的一些设计模式&#xff0c;并展示了如何在Apache Spark&#xff08;R&#xff09;中实现这些模式。 在编写MapReduce或Spark程序时&#xff0c;考虑执行作业的数据流很有用。 即使Pig&#xff0c;Hive&a…

计算机主机风扇安装方法,电脑机箱怎么安装风扇减震胶钉保护主板cup?

炎炎夏日&#xff0c;是时候给你的爱机清清灰&#xff0c;特别是对于机箱散热不好的朋友就需要给电脑机箱装上几个风力强劲的风扇&#xff0c;这样可以大大减少CPU、主板等的老化时间&#xff0c;延长爱机的寿命。现在机箱风扇大都使用橡胶拉钉(或者叫减震钉、固定钉)安装&…

2个css特效冲突了怎么办_患上类风湿病怎么办?2个方法拿走不谢

类风湿是一种常见的疾病&#xff0c;类风湿关节炎简称为类风湿&#xff0c;是一个累及周围关节为主的多系统性炎症性自身免疫病&#xff0c;患者的关节疼痛、肿胀&#xff0c;而且易反复发作。那么&#xff0c;得了类风湿病怎么办&#xff1f;得了类风湿病怎么办目前&#xff0…

将项目导入eclipse中出现的jsp页面报错

图片摘自百度经验&#xff0c;实在是每次都会忘了步骤&#xff0c;每次都得重新百度&#xff0c;所以索性自己总结到博客中&#xff0c;下次如果还记不住就直接从博客中看。原谅我实在学渣&#xff0c;呜呜~~~~(>_<)~~~~ 转载于:https://www.cnblogs.com/yangyufan/p/600…

怎样让计算机恢复到桌面上,如何把电脑桌面恢复成原样.怎么办?

此方案适用XP\VISTA\WIN7系统【问题描述】&#xff1a;桌面图标太多【原因分析】&#xff1a;1.下载的软件快捷方式放到桌面没有进行整理;2.在桌面上放置太多的文件【简易步骤】&#xff1a;【360安全卫士】—【功能大全】—【桌面管理】—【整理桌面个人资料】【解决方案】&am…

中装订线位置_企业宣传画册、产品目录常用的装订方法

印刷是个专业活&#xff0c;特别是画报、画册这些种类多&#xff0c;要求高。下面介绍一下最常用到的三种装订方法&#xff1a;骑马订骑马订(saddlestitch)英文是马鞍的意思&#xff0c;取其于装订之时&#xff0c;将摺好的页子如同为马匹上鞍一般的动作&#xff0c;配至装订机…