/// <summary>/// 操作word通用类 LIYOUMING add 2017-12-27 /// </summary>public class DocHelper{/// <summary>/// 获取模版设计服务数据服务/// </summary>private static IOccupationDesigner _sqlServices = AutofacWorkContainer.Resolve<IOccupationDesigner>();/// <summary>/// 拼接组合多个Word文档/// </summary>/// <param name="filepaths">模版文件多个</param>/// <param name="savepath">保存文件地址</param>public static void BeachReadWord(List<WordSeting> wordSetings, string unitid, out MemoryStream stream){if (wordSetings == null || wordSetings.Count == 0){throw new Exception("未设置Word模版");}//载入第一个模版Document doc = new Document();//载入模板
            doc.RemoveAllChildren();wordSetings.ForEach(c =>{Document srcDoc = ReadWord(c, unitid);srcDoc.FirstSection.PageSetup.SectionStart = SectionStart.Continuous;doc.AppendDocument(srcDoc, ImportFormatMode.KeepSourceFormatting);});stream = new MemoryStream();doc.Save(stream, Aspose.Words.Saving.SaveOptions.CreateSaveOptions(SaveFormat.Docx));//   doc.Save(stream, SaveFormat.Docx);
        }/// <summary>/// 业务操作/// </summary>/// <param name="filepath"></param>private static Document ReadWord(WordSeting wordSeting, string unitid){Document srcDoc = new Document(wordSeting.WordPath);switch (wordSeting.WordType){case (int)Models.Enum.WordType.Column:InsertPic_Column3D(srcDoc, wordSeting, unitid);break;case (int)Models.Enum.WordType.PIE:InsertPic_Pie3D(srcDoc, wordSeting, unitid);break;case (int)Models.Enum.WordType.Line:InsertPic_Line3D(srcDoc, wordSeting, unitid);break;case (int)Models.Enum.WordType.TEXT:InsertData_Replace(srcDoc, wordSeting, unitid);break;case (int)Models.Enum.WordType.Table:InsertData_Table(srcDoc, wordSeting, unitid);break;case (int)Models.Enum.WordType.HTML:InsertData_HTML(srcDoc, wordSeting, unitid);break;}#region 测试版本呢//if (typeId == 0)//{//    #region 虚拟化数据//    //DataTable datasource = new DataTable("tb");//    //datasource.Columns.Add("类型");//    //datasource.Columns.Add("已预约");//    //datasource.Columns.Add("体检中");//    //datasource.Columns.Add("已打印");//    //for (int i = 0; i < 3; i++)//    //{//    //    var row = datasource.NewRow();//    //    row["类型"] = "分组" + i;//    //    row["已预约"] = 5 * (i + 1);//    //    row["体检中"] = 3 * (i + 1);//    //    row["已打印"] = 9 * (i + 1);//    //    datasource.Rows.Add(row);//    //}//    #endregion//    InsertPic_Column3D(srcDoc, wordSeting, unitid);//}//if (typeId == 1)//{//    #region 虚拟化数据//    //DataTable datasource = new DataTable("tb");//    //datasource.Columns.Add("类型");//    //datasource.Columns.Add("已预约");//    //datasource.Columns.Add("体检中");//    //datasource.Columns.Add("已打印");//    //for (int i = 0; i < 1; i++)//    //{//    //    var row = datasource.NewRow();//    //    row["类型"] = "分组" + i;//    //    row["已预约"] = 5 * (i + 1);//    //    row["体检中"] = 3 * (i + 1);//    //    row["已打印"] = 9 * (i + 1);//    //    datasource.Rows.Add(row);//    //}//    #endregion//    InsertPic_Pie3D(srcDoc, wordSeting, unitid);//}//if (typeId == 2)//{//    #region 虚拟化数据//    //DataTable datasource = new DataTable("tb");//    //datasource.Columns.Add("类型");//    //datasource.Columns.Add("已预约");//    //datasource.Columns.Add("体检中");//    //datasource.Columns.Add("已打印");//    //for (int i = 0; i < 1; i++)//    //{//    //    var row = datasource.NewRow();//    //    row["类型"] = "分组" + i;//    //    row["已预约"] = 5 * (i + 1);//    //    row["体检中"] = 3 * (i + 1);//    //    row["已打印"] = 9 * (i + 1);//    //    datasource.Rows.Add(row);//    //}//    #endregion//    InsertData_Table(srcDoc, wordSeting, unitid);//}//if (typeId == 3)//{//    #region 虚拟化数据//    //DataTable datasource = new DataTable("tb");//    //datasource.Columns.Add("类型");//    //datasource.Columns.Add("已预约");//    //datasource.Columns.Add("体检中");//    //datasource.Columns.Add("已打印");//    //for (int i = 0; i < 3; i++)//    //{//    //    var row = datasource.NewRow();//    //    row["类型"] = "分组" + i;//    //    row["已预约"] = 5 * (i + 1);//    //    row["体检中"] = 3 * (i + 1);//    //    row["已打印"] = 9 * (i + 1);//    //    datasource.Rows.Add(row);//    //}//    #endregion//    InsertPic_Line3D(srcDoc, wordSeting, unitid);//}//if (typeId == 4)//{//    #region 虚拟化数据//    //DataTable datasource = new DataTable("tb");//    //datasource.Columns.Add("类型");//    //datasource.Columns.Add("已预约");//    //datasource.Columns.Add("体检中");//    //datasource.Columns.Add("已打印");//    //for (int i = 0; i < 1; i++)//    //{//    //    var row = datasource.NewRow();//    //    row["类型"] = "分组" + i;//    //    row["已预约"] = 5 * (i + 1);//    //    row["体检中"] = 3 * (i + 1);//    //    row["已打印"] = 9 * (i + 1);//    //    datasource.Rows.Add(row);//    //}//    替换数据处理//    //DataSet ds = new DataSet();//    //ds.Tables.Add(datasource);//    #endregion//    InsertData_Replace(srcDoc, wordSeting, unitid);//} #endregionreturn srcDoc;}/// <summary>/// 添加分组列说明 liyouming /// </summary>/// <param name="chart"></param>/// <param name="seriesSize">分组数量</param>/// <param name="lableSize">列组数量</param>private static void SetLable_Column(Chart chart, int seriesSize, int lableSize){for (int j = 0; j < seriesSize; j++){ChartDataLabelCollection dataLabelCollection = chart.Series[j].DataLabels;for (int i = 0; i < lableSize; i++){ChartDataLabel chartDataLabel = dataLabelCollection.Add(i);chartDataLabel.ShowLegendKey = true;chartDataLabel.ShowLeaderLines = true;chartDataLabel.ShowCategoryName = false;//chartDataLabel.ShowPercentage = true;chartDataLabel.ShowSeriesName = true;chartDataLabel.ShowValue = true;chartDataLabel.Separator = "  ";}}}/// <summary>/// 设置显示Lable/// </summary>/// <param name="chart"></param>/// <param name="lableSize"></param>private static void SetLable_Pie(Chart chart, int lableSize){ChartDataLabelCollection dataLabelCollection = chart.Series[0].DataLabels;for (int i = 0; i < lableSize; i++){ChartDataLabel chartDataLabel = dataLabelCollection.Add(i);chartDataLabel.ShowLegendKey = true;chartDataLabel.ShowLeaderLines = true;chartDataLabel.ShowCategoryName = true;chartDataLabel.ShowPercentage = true;chartDataLabel.ShowSeriesName = false;chartDataLabel.ShowValue = true;chartDataLabel.Separator = "  ";}}/// <summary>/// 饼状图/// </summary>/// <param name="doc"></param>/// <param name="with"></param>/// <param name="height"></param>/// <param name="datasource"></param>private static Document InsertPic_Pie3D(Document doc, WordSeting wordseting, string UinitId){DataTable datasource = null;if (string.IsNullOrEmpty(wordseting.WordData)){throw new Exception("Pie图形未设置数据源");}//获取数据源datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId).Tables[0];Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);ChartType imagestype = ChartType.Pie;if (wordseting.ImgageType == 1){imagestype = ChartType.Pie3D;}Shape shape = builder.InsertChart(imagestype, (double)wordseting.Width, (double)wordseting.Height);shape.Title = wordseting.Title;Chart chart = shape.Chart;ChartSeriesCollection seriesColl = chart.Series;seriesColl.Clear();//生成word 分组统计图,说明 liyouming  add/*------类型[固定]---series1-----series2------------分组名1--------22----------62--------------------------------------------------------*/List<string> lstCategories = new List<string>();if (datasource != null && datasource.Rows.Count > 0){List<DataRow> lstRows = new List<DataRow>();foreach (DataRow row in datasource.Rows){lstRows.Add(row);}List<double> doub = new List<double>();foreach (DataColumn col in datasource.Columns){if (col.ColumnName != "类型"){lstCategories.Add(col.ColumnName);foreach (var datarow in lstRows){double doubx = 0;double.TryParse(datarow[col.ColumnName] + "", out doubx);doub.Add(doubx);}}}string[] categories = lstCategories.ToArray();seriesColl.Add(shape.Title, categories, doub.ToArray());if (wordseting.IfChartLabel == 1){SetLable_Pie(chart, lstCategories.Count);}}return builder.Document;}/// <summary>/// 柱状分组图/// </summary>/// <param name="doc"></param>/// <param name="with"></param>/// <param name="height"></param>/// <param name="datasource"></param>private static Document InsertPic_Column3D(Document doc, WordSeting wordseting, string UinitId){DataTable datasource = null;if (string.IsNullOrEmpty(wordseting.WordData)){throw new Exception("Column图形未设置数据源");}//获取数据源datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId).Tables[0];Aspose.Words.DocumentBuilder builder = new Aspose.Words.DocumentBuilder(doc);ChartType imagestype = ChartType.Column;if (wordseting.ImgageType == 1){imagestype = ChartType.Column3D;}Shape shape = builder.InsertChart(imagestype, (double)wordseting.Width, (double)wordseting.Height);shape.Title = wordseting.Title;Chart chart = shape.Chart;ChartSeriesCollection seriesColl = chart.Series;seriesColl.Clear();//生成word 分组统计图,说明 liyouming  add/*------类型[固定]---series1-----series2------------分组名1--------22----------62----------------分组名2--------88----------33--------------------------------------------------------*/List<string> lstCategories = new List<string>();if (datasource != null && datasource.Rows.Count > 0){List<DataRow> lstRows = new List<DataRow>();foreach (DataRow row in datasource.Rows){lstCategories.Add(row["类型"] + "");lstRows.Add(row);}string[] categories = lstCategories.ToArray();foreach (DataColumn col in datasource.Columns){if (col.ColumnName != "类型"){List<double> doub = new List<double>();foreach (var datarow in lstRows){double doubx = 0;double.TryParse(datarow[col.ColumnName] + "", out doubx);doub.Add(doubx);}seriesColl.Add(col.ColumnName, categories, doub.ToArray());}}if (wordseting.IfChartLabel == 1){SetLable_Column(chart, seriesColl.Count, lstCategories.Count);}}return builder.Document;}/// <summary>/// 添加线性图/// </summary>/// <param name="doc"></param>/// <param name="with"></param>/// <param name="height"></param>/// <param name="datasource"></param>private static Document InsertPic_Line3D(Document doc, WordSeting wordseting, string UinitId){DataTable datasource = null;if (string.IsNullOrEmpty(wordseting.WordData)){throw new Exception("Line图形未设置数据源");}//获取数据源datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId).Tables[0];DocumentBuilder builder = new DocumentBuilder(doc);ChartType imagestype = ChartType.Line;if (wordseting.ImgageType == 1){imagestype = ChartType.Line3D;}Shape shape = builder.InsertChart(imagestype,(double)wordseting.Width, (double)wordseting.Height);shape.Title = wordseting.Title;Chart chart = shape.Chart;ChartSeriesCollection seriesColl = chart.Series;seriesColl.Clear();List<string> lstCategories = new List<string>();if (datasource != null && datasource.Rows.Count > 0){List<DataRow> lstRows = new List<DataRow>();foreach (DataRow row in datasource.Rows){lstCategories.Add(row["类型"] + "");lstRows.Add(row);}string[] categories = lstCategories.ToArray();foreach (DataColumn col in datasource.Columns){if (col.ColumnName != "类型"){List<double> doub = new List<double>();foreach (var datarow in lstRows){double doubx = 0;double.TryParse(datarow[col.ColumnName] + "", out doubx);doub.Add(doubx);}seriesColl.Add(col.ColumnName, categories, doub.ToArray());}}if (wordseting.IfChartLabel == 1){SetLable_Column(chart, seriesColl.Count, 1);}}return builder.Document;}/// <summary>/// 添加统计列表Table/// </summary>/// <param name="doc"></param>/// <param name="with"></param>/// <param name="height"></param>/// <param name="datasource"></param>private static Document InsertData_Table(Document doc, WordSeting wordseting, string UinitId){DataTable datasource = null;if (string.IsNullOrEmpty(wordseting.WordData)){throw new Exception("Table未设置数据源");}//获取数据源datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId).Tables[0];DocumentBuilder builder = new DocumentBuilder(doc);builder.Write(" ");if (datasource != null && datasource.Rows.Count > 0){Table table = builder.StartTable();foreach (DataColumn col in datasource.Columns){builder.InsertCell();table.AutoFit(AutoFitBehavior.FixedColumnWidths);builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//builder.CellFormat.SetPaddings(5, 5, 5, 5);builder.CellFormat.Width = (double)wordseting.Width;builder.Write(col.ColumnName);}builder.EndRow();foreach (DataRow row in datasource.Rows){foreach (DataColumn col in datasource.Columns){builder.InsertCell();builder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center;//builder.CellFormat.SetPaddings(5, 5, 5, 5);builder.CellFormat.Width = (double)wordseting.Width;builder.Write(row[col.ColumnName] + "");}builder.EndRow();}builder.EndTable();}return builder.Document;}/// <summary>/// 添加HTML数据 /// </summary>/// <param name="doc"></param>/// <param name="with"></param>/// <param name="height"></param>/// <param name="datasource"></param>private static Document InsertData_HTML(Document doc, WordSeting wordseting, string UinitId){DataSet datasource = null;//获取数据源
DocumentBuilder builder = new DocumentBuilder(doc);string htmlConetent = wordseting.WordHtml;//没有数据源就直接插入html内容if (datasource == null){}//有数据源把html当作模版写入 这里模版分为类型else{Regex regtag = new Regex(@"<temp class='TempIndex\d*'.*?>.*?</temp>");MatchCollection colectiontag = regtag.Matches(htmlConetent);datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId);#region TempIndex模版if (colectiontag.Count > 0){for (int p = 0; p < colectiontag.Count; p++){var _sb1 = new StringBuilder();var temp = colectiontag[p].Value;int tableIndex = 0;int.TryParse(temp.Substring(temp.IndexOf("TempIndex") + 9, 2), out tableIndex);DataTable defaultTabel = datasource.Tables[tableIndex];if (defaultTabel.Rows.Count > 0){string tempall = string.Empty;foreach (DataRow row1 in defaultTabel.Rows){string rowtemp = temp;foreach (DataColumn dc in defaultTabel.Columns){if (row1[dc.ColumnName] != null && temp.Contains("@" + dc.ColumnName)){rowtemp = Regex.Replace(rowtemp, "@" + dc.ColumnName, (row1[dc.ColumnName] + "").Replace("\r\n", "<br/>"));}}_sb1.Append(rowtemp);}htmlConetent = htmlConetent.Replace(temp, _sb1.ToString());}}}#endregionRegex regtable = new Regex(@"<table class='TableIndex\d*'.*?>.*?</table>");MatchCollection colectiontable = regtable.Matches(htmlConetent);#region TableIndex模版if (colectiontable.Count > 0){for (var i = 0; i < colectiontable.Count; i++){var _sb1 = new StringBuilder();var temp = colectiontable[i].Value;int tableIndex = 0;int.TryParse(temp.Substring(temp.IndexOf("TableIndex") + 10, 2), out tableIndex);DataTable dt = datasource.Tables[tableIndex];List<ItemsInfo> dic = new List<ItemsInfo>();string rowtemp = temp;if (dt.Rows.Count > 0){foreach (DataRow row in dt.Rows){dic.Add(new ItemsInfo { ProName = row["Name"] + "", ResultVal = row["Value"] + "" });}}try{Regex tep = new Regex(@"@.*?@");MatchCollection groupVal = tep.Matches(temp);for (var j = 0; j < groupVal.Count; j++){var v = groupVal[j].Value;string citem = v.Substring(1, v.Length - 2);var keyVal = dic.Where(x => x.ProName == citem).FirstOrDefault();if (keyVal != null){rowtemp = Regex.Replace(rowtemp, v, (keyVal.ResultVal + "").Replace("\\r\\n", "<br/>").Replace("\r\n", "<br/>"));}else{rowtemp = Regex.Replace(rowtemp, v, "");}}_sb1.Append(rowtemp);}catch (Exception e){}htmlConetent = htmlConetent.Replace(temp, _sb1.ToString());}}#endregion}builder.InsertHtml(htmlConetent);return builder.Document;}/// <summary>/// 替换文本/// </summary>/// <param name="doc"></param>/// <param name="datasource"></param>/// <returns></returns>private static Document InsertData_Replace(Document doc, WordSeting wordseting, string UinitId){DataSet datasource = null;if (string.IsNullOrEmpty(wordseting.WordData)){throw new Exception("Replace未设置数据源");}//获取数据源datasource = _sqlServices.GetWordDataBySql(wordseting.WordData, UinitId);if (datasource != null && datasource.Tables.Count > 0){foreach (DataTable table in datasource.Tables){if (table != null && table.Rows.Count == 1){foreach (DataColumn col in table.Columns){Regex reg1 = new Regex(@"{" + col.ColumnName + "}");doc.Range.Replace(reg1, table.Rows[0][col.ColumnName].ToString());}}else if (table != null){//这种设计数据源需用 Name Value 处理foreach (DataRow row in table.Rows){Regex reg1 = new Regex(@"{" + row["Name"] + "}");doc.Range.Replace(reg1, row["Value"] + "");}}}}return doc;}}

Aspose.Words

通过模版设计处理文档,测试效果

转载于:https://www.cnblogs.com/liyouming/p/8125882.html

Aspose.Words 自定义文档模版生成操作类相关推荐

  1. xml动态生成java_从XML文档动态生成Java类

    考虑这种情况:我有一个名为person.xml的 XML文件,其中包含以下数据. MrFoo 28 如果我想将这个XML读入Java对象,我将创建一个名为PersonBean的Java bean(使用 ...

  2. Android 打印,搜索连接同一局域网下的所有网络打印机,打印照片,打印自定义文档。

    Android 搜索局域网下的所有网络打印机,打印照片,打印自定义文档. Android 连接局域网下的网络打印机打印图片,和自定义文档打印 github地址: https://github.com/ ...

  3. 【使用分享】一文掌握Aspose.Words for Java,实现Word文档的生成与操作

    Aspose.Words for Java是一个功能强大的Java Word文档处理组件,支持文档的生成.修改.转换.渲染等功能.本文将为您全面介绍Aspose.Words的主要功能与用法. 一.文档 ...

  4. Apifox 生成接口文档 教程与操作步骤

    接口文档自动生成 本文主要介绍使用 apifox 如何生成接口文档,附上详细的使用教程和操作步骤. 使用Apifox 的可以自动生成接口文档.本文会给大家介绍下如何使用Apifox 来自动生成所需的接 ...

  5. 用java写ods系统_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo是基于数据库的代码自动生成工具,低代码编程技术的实现,可以零代码自动生成SpringBoot项目工程.生成JavaBean.生成前后端分离的CRUD代码.生成MyBaits的Mapper ...

  6. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1.新增对DB2数据库的支持 2.新增按字段生成文件,支持把字段.JSON.XML数据转换成任何代码 3.新增大量新的自 ...

  7. android 文档生成工具,word文档制作生成

    在手机上上办公同样简单方便,<word文档制作生成>APP让用户可以使用手机在线编辑文档,摆脱了电脑的束缚,随时随地都能办公.这款软件操作非常简单易上手,遇到不会的操作还有专门的视频讲解, ...

  8. 产品FAQ(常见问题)文档模版

    "FAQ"这个关键词可能很多人都见过,但如果不是行业内的人大概不会知道它的意思,所以这篇文章就介绍了什么是FAQ以及产品FAQ(常见问题)文档模版. FAQ是什么? FAQ是英语F ...

  9. wps python 自动化_Python实现合同文档自动化生成

    0. 引言 前两天整理了一篇使用Word中的邮件合并功能实现使用Excel数据源填入Word指定位置,从而批量生成相似文档的功能,实际上是在为今天的这篇文章做铺垫.这次我打算实现的功能是通过Pytho ...

最新文章

  1. Ubuntu10.04中IBus随系统启动的方法
  2. oracle索引大小暴增_oracle 如何预估将要创建的索引的大小
  3. 计算特征数据matlab代码,科学网—MATLAB特征提取代码 - 蒋样明的博文
  4. Spring集成Shiro框架实战
  5. 扫地机器人的特点描写_描写扫地机器人五年级作文500字
  6. 大数据(7) - zookeeper的安装与使用
  7. 牛客练习赛9 F - 珂朵莉的约数
  8. 拉普拉斯平滑处理介绍
  9. spa文件转换html,前端微服务化解决方案2 - Single-SPA
  10. 情人节看IT男如何告白,IT男的告白攻略
  11. 有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?
  12. 解密一个话费慢充的灰产项目
  13. #八、古老的查表计算器--图表
  14. Autodesk Inventor: Presentations Autodesk Inventor 教程之Presentations Lynda课程中文字幕
  15. 通过 PRTG EXE 高级监控脚本 + python 监控华为防火墙线路健康状态
  16. 查看库文件编译时所使用的GCC版本号
  17. 轨道看盘系统 通达信选股公式 看盘指标详解主图/副图
  18. 有不用网线不用电源的家用监控摄像头吗
  19. 抖音直播行业必知的50个专业术语总结
  20. 20本Java相关电子书

热门文章

  1. LVS(9)——为NAT单独增加路由器
  2. CentOS上使用OpenStack的一些问题
  3. 逆向与汇编的一些笔记
  4. SQL Server 2000 没开1433端口的问题
  5. windows-vscode编写c/c++(适用日期2020-5月的vscode)--简洁版(下载gdb.exe)
  6. 第八章 PX4-Pixhawk-SDlog解析
  7. 解决VS2017使用scanf报错问题
  8. html两方框重叠透明,html – 边缘浏览器向透明div添加重叠的“边缘”
  9. org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IPr
  10. Mysql日期和时间函数大全