c#操作word图表

前阵子接到了一个任务,需要实现一个功能,利用代码在word中插入图表并且插入数据,生成类似于柱状图,饼图,线条之类乱七八糟的东西,关于这个方面,不得不说网上的资料相对较少,多方查找资料之后发现大概有两种方式,一种是利用Microsoft.Office.Interop.Graph.Chart,另外一种是利用Microsoft.Office.Interop.Excel.Chart,二者的区别在于一个需要调用后者需要调用excel,而前者则不需要,但后者在word 07之后的版本显示出来的图表会比前者漂亮,这里主要先贴出第一种的操作方法,第二种插入Excel图表的方法会在另外一篇文章中给出。由于需要在word文档的指定位置上插入图表,所以需要手工在文档中添加标签,然后通过代码寻找相应的标签定位。好了,不说废话,上代码

首先,添加两个引用,Microsoft.Office.Interop.Word,Microsoft.Office.Interop.Graph

/// <summary>/// 将图表插入到word文档中/// </summary>/// <param name="oEndOfDoc">书签</param>/// <param name="data">数据源</param>/// <param name="height">高</param>/// <param name="width">宽</param>/// <param name="chartType">图标类型</param>/// <param name="path">word文档路径</param>public static void AddChartByXiaominge(Object oEndOfDoc, DataSet data, float height, float width, XlChartType chartType, string path,string title){object oMissing = System.Reflection.Missing.Value;Microsoft.Office.Interop.Word.Application oWord;Microsoft.Office.Interop.Word.Document oDoc = null;oWord = new Microsoft.Office.Interop.Word.Application();//打开word文档try{oDoc = oWord.Documents.Open(path, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);}catch (Exception e){oWord.Quit(Type.Missing, Type.Missing, Type.Missing);throw e;}//设置word界面为不可见oWord.Visible = false;if (oWord.ActiveDocument.Bookmarks.Exists(oEndOfDoc.ToString())){try{//插入chart    Word.InlineShape oShape;
<span style="white-space:pre">     </span>   //此处为插入的图表类型object oClassType = "MSGraph.Chart.8";Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing,ref oMissing, ref oMissing, ref oMissing,ref oMissing, ref oMissing, ref oMissing);object oChart = oShape.OLEFormat.Object;object[] Parameters = new Object[1];Parameters[0] = 4;Microsoft.Office.Interop.Graph.Chart objChart = (Microsoft.Office.Interop.Graph.Chart)oShape.OLEFormat.Object;Microsoft.Office.Interop.Graph.Application oChartApp = objChart.Application;objChart.ChartType = chartType;objChart.HasTitle = true;objChart.ChartTitle.Text = title;objChart.ChartTitle.Font.Size = 10;objChart.PlotArea.Interior.Color = Color.White;//绑定数据  DataSheet dataSheet;dataSheet = objChart.Application.DataSheet;dataSheet.Columns.Clear();dataSheet.Rows.Clear();System.Data.DataTable table = data.Tables[0];for (int i = 1; i <= table.Rows.Count + 1; i++){for (int j = 1; j <= table.Columns.Count; j++){if (i == 1 && j != 1){dataSheet.Cells[i, j] = table.Columns[j - 1].ColumnName;}else{if (!(i == 1 && j == 1)){dataSheet.Cells[i, j] = table.Rows[i - 2][j - 1];}}}}Microsoft.Office.Interop.Graph.Series s;Microsoft.Office.Interop.Graph.UpBars b;if (chartType != XlChartType.xl3DPieExploded){for (int i = 1; i <= table.Rows.Count; i++){s = (Microsoft.Office.Interop.Graph.Series)objChart.SeriesCollection(i);s.Shadow = false;
<span style="white-space:pre">             </span>//对图表进行润色if (chartType == XlChartType.xlColumnClustered){switch (i){case 1:s.Interior.Color=Color.LightBlue;break;case 2:s.Interior.Color = Color.GreenYellow;break;case 3:s.Interior.Color = Color.Khaki;break;case 4:s.Interior.Color = Color.Wheat;break;case 5:s.Interior.Color = Color.DodgerBlue;break;case 6:s.Interior.Color = Color.CornflowerBlue;break;case 7:s.Interior.Color = Color.LightYellow;break;default:s.Interior.ColorIndex = 6 * i + 6;break;}}s.HasDataLabels = true;s.DataLabels().Font.Size = 5;}objChart.Legend.Position = Microsoft.Office.Interop.Graph.XlLegendPosition.xlLegendPositionTop;objChart.Legend.Height = 15;objChart.Legend.Width = 150;objChart.Legend.Left = objChart.ChartArea.Width / 2 - objChart.Legend.Width/2;}else{objChart.HasLegend = false;s = (Microsoft.Office.Interop.Graph.Series)objChart.SeriesCollection(1);
<span style="white-space:pre">         </span>//for (int i = 1; i < table.Columns.Count; i++){switch (i){case 1:s.Points(i).Interior.Color = Color.LightBlue;break;case 2:s.Points(i).Interior.Color = Color.GreenYellow;break;case 3:s.Points(i).Interior.Color = Color.Khaki;break;case 4:s.Points(i).Interior.Color = Color.Wheat;break;case 5:s.Points(i).Interior.Color = Color.DodgerBlue;break;case 6:s.Points(i).Interior.Color = Color.CornflowerBlue;break;case 7:s.Points(i).Interior.Color = Color.LightYellow;break;default:s.Points(i).Interior.ColorIndex = 6 * i + 6;break;}}s.HasDataLabels = true;//显示引导线objChart.SeriesCollection(1).HasLeaderLines = true;//显示百分比s.DataLabels().ShowPercentage = true;s.DataLabels().Font.Size = 6;//显示分组名s.DataLabels().ShowCategoryName = true;//不显示数值s.DataLabels().ShowValue = false;}objChart.Application.Update();oChartApp.Update();oChartApp.Quit();//宽oShape.Width = width;//高oShape.Height = height;oDoc.Save();}catch (Exception e){throw e;}finally{//关闭wordoWord.Quit(Type.Missing, Type.Missing, Type.Missing);}}else{//关闭wordoWord.Quit(Type.Missing, Type.Missing, Type.Missing);throw new Exception("找不到书签" + oEndOfDoc.ToString());}}

由于默认的颜色是在是不敢恭维,一片的冷色调加灰色背景,于是增加了一些颜色的调整,但添加颜色的方法相对原始,希望有大神看了之后给出更好的方法。

好吧,总结一下,用这个方法操作word图表,无论是从简便性还是运行速率,都比操作Excel图表更胜一筹,唯一的缺点就是图表的样式相对比较难看,当然这里已经进行了一些处理,相对友好了一些。初次写博客,难免有些疏漏,也希望抛砖引玉,得到高手的指教。本文档及代码欢迎转载,但转载前请标明原始出处!

c#操作word图表(一)相关推荐

  1. c#操作word图表(二)

    c#操作word图表(excel) 这一篇是对上一篇操作word类文章的补充,上一篇是通过Microsoft.Office.Interop.Graph插入图表,但样式稍差,这次是通过调用excel来插 ...

  2. 【JAVA - POI 合集】之 POI 操作word 图表,柱状图,折线图,雷达图,条形图 poi4.1.2

    1.前言 关于poi 操作word 的吐槽: 山路崎岖, 一言难尽啊!!! 原本项目中的poi 版本是3.17的版本,但是3.17对于在word 中操作图表是有问题的.所以对项目的jar 包进行了升级 ...

  3. Java操作Word图表

    一.POM <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artif ...

  4. poi操作word替换模板向指定位置添加图表

    poi操作word替换模板向指定位置添加图表 首先是引入pom文件 <dependency><groupId>org.apache.poi</groupId>< ...

  5. poi实现操作生成word表格和操作word中的图表数据

    poi实现操作生成word表格和操作word中的图表数据 写入word表格 1.1首先要将写入的数据整理好,将其封装在一个类中: 1.2 其次将数据写入word,写成表格 2 在word表格中动态修改 ...

  6. C#操作Word Aspose.Words组件介绍及使用 基本介绍与DOM概述

    1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...

  7. java poi 操作word遇到的问题

    java poi 操作word文本,图表,遇到的问题 直接上问题 模板字段匹配问题 图表问题 图表导出 问题:模板找不到对应图表 问题:数据填充后效果不达目标 图表中为零的数值去掉(!!!模板层面解决 ...

  8. 使用poi操作word

    导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifa ...

  9. VC++ 操作 word

    摘要: 使用VC编程来操纵Office.你可以实现诸如:Word文件打印.传送数据到Word文档.发送E-MAIL.自动产生表格.Excel数据统计.圆饼图,直方图显示.自动报表生成.播放幻灯.doc ...

最新文章

  1. 长sql和短sql加java区别_Mybatis下动态sql中##和$$的区别讲解
  2. 「BATJ面试系列」并发编程
  3. 用贪心算法解决马踏棋盘问题
  4. I/O多路转接之 select
  5. Android 5.1 API 22 所有sdk文件下载地址
  6. IntelliJ IDEA快捷键(Shortcut)官方文档地址
  7. 程序员应该多逛的几个技术网站
  8. 信息学奥赛一本通 1104:计算书费 | OpenJudge NOI 1.6 03
  9. 谷歌在线办公法器-Google Docs
  10. ios8升级ios12教程_iOS Hello World示例教程
  11. 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
  12. php下载apk文件源码下载,php文件下载功能简单源码示例
  13. 自动化所宗成庆研究员:108页PPT干货读懂NLP的过去与现在!(附教材PPT)
  14. 大地经纬度坐标系与Web墨卡托坐标系的转换
  15. 类似组卷网实现快速组卷功能,实现试题,试卷,课件快速录入、搜索、分类查询,支持mathtype和latex2word。
  16. Nebula Graph - 集群模式部署
  17. animate.css 梦幻西游动画
  18. 【Python数据分析——使用matplotlib制作南丁格尔玫瑰图】
  19. 苹果app store水军_苹果终止App Store开发者反叛的解决方案
  20. 【C#】【Unity】第三人称摄像机跟随人物移动时碰撞到墙壁等,摄像机不穿越墙壁

热门文章

  1. 加速度计与陀螺仪区别
  2. 【该文章已被封禁】区块链钱包APP逆向分析及实现
  3. 计算机专业研究生职业生涯规划
  4. 转载:ZedGraph使用帮助
  5. df命令(df命令完成什么功能)
  6. 视频合成剪辑者的福音-百度在线语音合成
  7. 大厂钟爱的全链路压测有什么意义?四种压测方案详细对比分析
  8. Hadoop之HDFS常见面试题
  9. Centos8 开启Telnet服务
  10. 工控电脑触摸显示屏幕监控报警方案-基于WiFi摄像头定时拍照图像识别技术