Aspose.Words 操作 Word 画 EChart 图

使用 Aspose.Words 插件在 Word 画 EChart 图

使用此插件可以画出丰富的 EChart 图,API 参考 https://reference.aspose.com/words/net/aspose.words.drawing.charts/charttype/

首先需要在 vs 中引入插件

Aspose.Words 操作 Word 画 EChart 图

代码中添加引用

using Aspose.Words;
using Aspose.Words.Drawing.Charts;
using Aspose.Words.Tables;

1、插入文字内容和表格

我们只需要获取模板,并且创建一个文档对象,将内容写入进去即可

创建表格时,需要创建头,规定每个单元格长度,宽度,将对应的数据库字段对应上

Aspose.Words 操作 Word 画 EChart 图Aspose.Words 操作 Word 画 EChart 图
1 DataTable dt = new DataTable();
 2
 3             //读取 Word 模板
 4             Document doc = new Document("C:\\TestProject\\WebApplication1\\WebApplication1\\Word\\AsposeWord.doc");
 5
 6             //创建文档对象
 7             DocumentBuilder builder = new DocumentBuilder(doc);
 8
 9             #region 插入文字信息
10             //Word 中对应书签的名称
11             builder.MoveToBookmark("文章标题");
12
13             //写入内容
14             builder.Write("学会使用AsposeWord画EChart图");
15             #endregion
16
17             #region 列表
18             builder.MoveToBookmark("学生信息列表");
19
20             Aspose.Words.Tables.Table table3 = builder.StartTable();//开始画Table
21             string[] columnheadersWD = { "序号", "姓名", "学科", "分数", "性别", "年龄" };
22             string[] columnnamesWD = { "ID", "TNAME", "DNAME", "SAL", "TSEX", "AGE" };
23             double[] colwidthsWD = { 50, 100, 100, 50, 50, 50 };
24
25             dt = DBHelper.ExecuteDataTable("SELECT top 5 * FROM [testdb].[dbo].[TEACHER]");
26
27             InsertTable(builder, table3, columnheadersWD, columnnamesWD, colwidthsWD, dt);
28
29             //第三列的 第三行,第四行 合并
30             MergeCells(table3.Rows[3].Cells[2], table3.Rows[4].Cells[2]);
31             #endregion

View Code

这里我们将画表格的方法和合并单元格的方法封装好了

Aspose.Words 操作 Word 画 EChart 图Aspose.Words 操作 Word 画 EChart 图
1         ///
  2         /// 列表表格
  3         ///
  4         ///
  5         ///
  6         ///
  7         ///
  8         ///
  9         ///
 10         public static void InsertTable(DocumentBuilder builder, Aspose.Words.Tables.Table table, string[] columnheaders, string[] columnnames, double[] colwidths, DataTable statisTable)
 11         {
 12             var str = "";
 13
 14             #region 画表头
 15             for (int i = 0; i < columnheaders.Length; i++)
 16             {
 17                 str = columnheaders[i];
 18                 builder.InsertCell();
 19                 //Table单元格边框线样式
 20                 builder.CellFormat.Borders.LineStyle = LineStyle.Single;
 21                 //Table此单元格宽度
 22                 builder.RowFormat.Height = 30;
 23                 builder.CellFormat.Width = colwidths[i];
 24                 //此单元格中内容垂直对齐方式
 25                 builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
 26                 builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
 27                 builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
 28                 //字体大小
 29                 builder.Font.Size = 10;
 30                 //是否加粗
 31                 builder.Bold = false;
 32                 //向此单元格中添加内容
 33                 builder.Write(str);
 34             }
 35             builder.EndRow();
 36             #endregion
 37
 38             #region 画数据
 39             for (int j = 0; j < statisTable.Rows.Count; j++)
 40             {
 41                 for (int i = 0; i < columnheaders.Length; i++)
 42                 {
 43                     try
 44                     {
 45                         str = statisTable.Rows[j][columnnames[i]].ToString();
 46                     }
 47                     catch (Exception e) { str = ""; }
 48                     builder.InsertCell();
 49                     //Table单元格边框线样式
 50                     builder.CellFormat.Borders.LineStyle = LineStyle.Single;
 51                     //Table此单元格宽度
 52                     builder.RowFormat.Height = 30;
 53                     builder.CellFormat.Width = colwidths[i];
 54
 55                     //builder.CellFormat.Shading.ForegroundPatternColor = Color.Red;//设置单元格颜色
 56
 57                     //此单元格中内容垂直对齐方式
 58                     builder.CellFormat.VerticalAlignment = Aspose.Words.Tables.CellVerticalAlignment.Center;
 59                     builder.CellFormat.HorizontalMerge = Aspose.Words.Tables.CellMerge.None;
 60                     builder.CellFormat.VerticalMerge = Aspose.Words.Tables.CellMerge.None;
 61                     //字体大小
 62                     builder.Font.Size = 10;
 63                     //是否加粗
 64                     builder.Bold = false;
 65                     //向此单元格中添加内容
 66                     builder.Write(str);
 67                 }
 68                 builder.EndRow();
 69             }
 70             #endregion
 71
 72             //Table行结束
 73             builder.EndTable();
 74             table.AutoFit(Aspose.Words.Tables.AutoFitBehavior.FixedColumnWidths);
 75             table.Alignment = Aspose.Words.Tables.TableAlignment.Center;
 76         }
 77
 78         ///
 79         /// 合并单元格
 80         ///
 81         ///
 82         ///
 83         public static void MergeCells(Cell startCell, Cell endCell)
 84         {
 85             Aspose.Words.Tables.Table parentTable = startCell.ParentRow.ParentTable;
 86
 87             // Find the row and cell indices for the start and end cell.

 88             Point startCellPos = new Point(startCell.ParentRow.IndexOf(startCell), parentTable.IndexOf(startCell.ParentRow));
 89             Point endCellPos = new Point(endCell.ParentRow.IndexOf(endCell), parentTable.IndexOf(endCell.ParentRow));
 90             // Create the range of cells to be merged based off these indices. Inverse each index if the end cell if before the start cell.

 91             Rectangle mergeRange = new Rectangle(Math.Min(startCellPos.X, endCellPos.X), Math.Min(startCellPos.Y, endCellPos.Y), Math.Abs(endCellPos.X - startCellPos.X) + 1,
 92             Math.Abs(endCellPos.Y - startCellPos.Y) + 1);
 93
 94             foreach (Row row in parentTable.Rows)
 95             {
 96                 foreach (Cell cell in row.Cells)
 97                 {
 98                     Point currentPos = new Point(row.IndexOf(cell), parentTable.IndexOf(row));
 99
100                     // Check if the current cell is inside our merge range then merge it.

101                     if (mergeRange.Contains(currentPos))
102                     {
103                         if (currentPos.X == mergeRange.X)
104                             cell.CellFormat.HorizontalMerge = CellMerge.First;
105                         else
106                             cell.CellFormat.HorizontalMerge = (CellMerge.Previous);
107
108                         if (currentPos.Y == mergeRange.Y)
109                             cell.CellFormat.VerticalMerge = (CellMerge.First);
110                         else
111                             cell.CellFormat.VerticalMerge = (CellMerge.Previous);
112                     }
113                 }
114             }
115         }

View Code

2、单双曲线图,饼图,柱状图

曲线图需要用到 InsertChart 方法指定图表类型 Line,这三种图区别不大方法一样,只需要指定图表类型

ChartSeriesCollection seriesCollection = chart.Series; 提供了向图表插入数据的操作,有点类似 List 如果你只有一条曲线(柱状图),写一个 Add 就行,如果是多条曲线(柱状图),则添加多个 Add 数据即可展示多条曲线(柱状图)

Aspose.Words 操作 Word 画 EChart 图Aspose.Words 操作 Word 画 EChart 图
1 #region 曲线
 2             builder.MoveToBookmark("双曲线");
 3             var shape = builder.InsertChart(ChartType.Line, 430, 210);//插入线形图
 4             Chart chart = shape.Chart;
 5             ChartSeriesCollection seriesCollection = chart.Series;
 6             seriesCollection.Clear();//清除默认
 7             chart.Title.Text = "双曲线";
 8             chart.AxisX.TickLabelPosition = AxisTickLabelPosition.Low;
 9
10             dt = DBHelper.ExecuteDataTable("select top 5 TNAME,sal,sal+100 as SAL1 from TEACHER");
11
12             var categories = new string[dt.Rows.Count];
13             var values = new double[dt.Rows.Count];
14             var values1 = new double[dt.Rows.Count];
15
16             for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
17             {
18                 categories[rowIndex] = dt.Rows[rowIndex][0].ToString();
19                 values[rowIndex] = Convert.ToDouble(dt.Rows[rowIndex][1]);
20                 values1[rowIndex] = Convert.ToDouble(dt.Rows[rowIndex][2]);
21             }
22
23             chart.Legend.Position = LegendPosition.Top;
24
25             seriesCollection.Add("线条一", categories, values);//添加数据
26             seriesCollection.Add("线条二", categories, values1);//添加数据
27             #endregion
28
29             #region 饼状图
30             dt = DBHelper.ExecuteDataTable("select top 1 sal,sal+100 as SAL1,sal+200 as SAL2 from TEACHER");
31
32             List list1 = new List();
33             for (int i = 0; i < dt.Rows.Count; i++)
34             {
35                 list1.Add(new CountModel { mark = "一", num = Convert.ToDouble(dt.Rows[i][0]) });
36                 list1.Add(new CountModel { mark = "二", num = Convert.ToDouble(dt.Rows[i][1]) });
37                 list1.Add(new CountModel { mark = "三", num = Convert.ToDouble(dt.Rows[i][2]) });
38             }
39
40             builder.MoveToBookmark("饼状图");
41             var shape1 = builder.InsertChart(ChartType.Pie, 430, 210);//插入线形图
42             Chart chart1 = shape1.Chart;
43             ChartSeriesCollection seriesCollection1 = chart1.Series;
44             seriesCollection1.Clear();//清除默认
45             chart1.Title.Text = "饼状图";
46
47             var categories2 = new string[list1.Count];
48             var values2 = new double[list1.Count];
49
50             for (int rowIndex = 0; rowIndex < list1.Count; rowIndex++)
51             {
52                 categories2[rowIndex] = list1[rowIndex].mark.ToString();
53                 values2[rowIndex] = Convert.ToDouble(list1[rowIndex].num);
54             }
55
56             chart1.Legend.Position = LegendPosition.Top;
57
58             seriesCollection1.Add("饼状图", categories2, values2);//添加数据
59             #endregion
60
61             #region 柱状图
62             dt = DBHelper.ExecuteDataTable("select top 5 tname,sal,sal+100 as SAL1,sal+200 as SAL2 from TEACHER");
63
64             builder.MoveToBookmark("柱状图");
65             var shape2 = builder.InsertChart(ChartType.Column, 430, 210);//插入线形图
66             Chart chart2 = shape2.Chart;
67             ChartSeriesCollection seriesCollection3 = chart2.Series;
68             seriesCollection3.Clear();//清除默认
69             chart2.Title.Text = "柱状图";
70             chart2.AxisX.TickLabelPosition = AxisTickLabelPosition.Low;
71
72             var categories3 = new string[dt.Rows.Count];
73             var values11 = new double[dt.Rows.Count];
74             var values22 = new double[dt.Rows.Count];
75             var values3 = new double[dt.Rows.Count];
76
77             for (int rowIndex = 0; rowIndex < dt.Rows.Count; rowIndex++)
78             {
79                 categories3[rowIndex] = dt.Rows[rowIndex][0].ToString();
80                 values11[rowIndex] = Convert.ToDouble(dt.Rows[rowIndex][1]);
81                 values22[rowIndex] = Convert.ToDouble(dt.Rows[rowIndex][2]);
82                 values3[rowIndex] = Convert.ToDouble(dt.Rows[rowIndex][3]);
83             }
84
85             chart2.Legend.Position = LegendPosition.Top;
86
87             seriesCollection3.Add("一", categories3, values11);//添加数据
88             seriesCollection3.Add("二", categories3, values22);//添加数据
89             seriesCollection3.Add("三", categories3, values3);//添加数据
90             #endregion

View Code

3、散点图

散点图跟其他图略有区别,散点图是 XY 的坐标点形式处理数据

Aspose.Words 操作 Word 画 EChart 图Aspose.Words 操作 Word 画 EChart 图
1 #region 散点图
 2             var result = new List();
 3             result.Add(new SD() { wd = 15, wy = 16 });
 4             result.Add(new SD() { wd = 14, wy = 23 });
 5             result.Add(new SD() { wd = 34, wy = 23 });
 6             result.Add(new SD() { wd = 12, wy = 23 });
 7             result.Add(new SD() { wd = 34, wy = 45 });
 8             result.Add(new SD() { wd = 32, wy = 23 });
 9             result.Add(new SD() { wd = 45, wy = 56 });
10             result.Add(new SD() { wd = 34, wy = 55 });
11
12             builder.MoveToBookmark("散点图");
13             var shape3 = builder.InsertChart(ChartType.Scatter, 430, 210);//插入线形图
14             Chart chart3 = shape3.Chart;
15             ChartSeriesCollection seriesCollection4 = chart3.Series;
16             seriesCollection4.Clear();//清除默认
17             chart3.Title.Text = "散点图";
18             chart3.AxisX.TickLabelPosition = AxisTickLabelPosition.Low;
19
20             var categories4 = new double[result.Count];
21             var values4 = new double[result.Count];
22
23             for (int i = 0; i < result.Count; i++)
24             {
25                 categories4[i] = Convert.ToDouble(result[i].wd);
26                 values4[i] = Convert.ToDouble(result[i].wy);
27             }
28
29             chart3.Legend.Position = LegendPosition.Top;
30             seriesCollection4.Add("散点图", categories4, values4);//添加数据
31             #endregion

View Code

最后将内容输出到指定的新文档中

1 string cpath = "C:\\TestProject\\测试文档存放\\文档" + DateTime.Now.ToString("ddhhmmss") + ".doc";
2 doc.Save(cpath);
3 doc.Save(cpath.Replace(".doc", ".pdf"), SaveFormat.Pdf);  //同时转成 PDF 生成一份

这里只是简单的操作显示图表,如果需要具体详细的细节操作,参考官方提供的API文档。

效果图

Aspose.Words 操作 Word 画 EChart 图

Original: https://www.cnblogs.com/liuchenxing/p/16814073.html
Author: object0812
Title: Aspose.Words 操作 Word 画 EChart 图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/800419/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Pytest测试框架的基本使用和allure测试报告

    一、测试用例的识别与运行 目录识别 通过pytest.ini配置文件配置 如果未指定任何参数,则收集从testpaths(如已配置)或当前目录开始。另外,命令行参数可以在目录、文件…

    Python 2023年9月11日
    070
  • python flask 响应的data, code, headers三种设置方式

    过多次的测试,发现接口函数的返回值一定会经过 flask_restful.Api.make_response 处理后, 通过 flask.Flask 对象返回给调用方。 分享三种响…

    Python 2023年8月11日
    048
  • 相机内参标定,相机和激光雷达联合标定

    相机内参标定,相机和激光雷达联合标定 一、相机标定原理 * 1.1 成像过程 1.2 标定详解 二、相机和激光雷达联合标定 * 2.1 标定方法汇总 2.2 Autoware的安装…

    Python 2023年10月10日
    050
  • Numpy 目标检测数据集 按各类别的边界框数量分割

    在计算机视觉任务中,很多时候会面对棘手的多标签数据集,比如多标签分类数据集 (即一张图像有多个标签)、目标检测数据集、语义分割数据集 对于类别数量均衡的数据集,留出法可以为模型分配…

    Python 2023年8月24日
    048
  • Django项目部署至华为云服务器

    部署Django项目到华为云服务器教程 基于Ubuntu 20.04 + Python3.7 + mysql5.6 + Django3.2.6 + 宝塔Linux面板 1. ssh…

    Python 2023年8月3日
    069
  • python微软雅黑_matplotlib中文显示-微软雅黑

    网上有很多方法,但是基本的是片面的。 参考1 https://tracholar.github.io/wiki/python/matplotlib-chinese-font.htm…

    Python 2023年9月5日
    065
  • 图像滤波简介

    文章目录 1. 图像滤波 2. 图像滤波的常用方法 * 2.1 均值滤波 2.2 方框滤波 2.3 高斯滤波 2.4 中值滤波 2.5 双边滤波 2.6 低通滤波 2.7 高通滤波…

    Python 2023年10月24日
    042
  • flask入门(三)静态文件

    静态文件(static files)和模板的概念相反,指的是内容不需要动态生成的文件,比如图片、CSS 文件和 JavaScript 脚本等。 在 Flask 中,我们需要创建一个…

    Python 2023年8月9日
    029
  • Flask实现接收与返回json的接口

    Flask实现接收与返回json的接口 在我们做后台开发的时候,要能够实现与前端的数据交互,现在就主要讲一下在flask框架下如何实现一些简单的接口,功能是能够接收前端传来的jso…

    Python 2023年8月13日
    064
  • pandas库数据处理总结

    抵扣说明: 1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。 Original: https://blo…

    Python 2023年8月9日
    070
  • MapReduce 概述原理说明

    文章目录 MapReduce概述 * 一、MapReduce定义 二、MapReduce 优缺点 – 1、MapReduce 优点 + (1)、MapReduce 易于…

    Python 2023年9月7日
    046
  • pygame安装教程(小白入手)

    ** pygame安装教程(小白入手) ** 1.在python官网上下载pygame 官网url点击pypi在搜索框输入pygame 点击搜索点击对应的版本(选择第一个)看到对应…

    Python 2023年9月23日
    095
  • python学习笔记(十二)

    python的pandas模块 pandas和numpy的区别 numpy比作列表,那么pandas更像字典形式 pandas的使用 import pandas as pdimpo…

    Python 2023年8月8日
    034
  • python数据分析day2

    目录 matplotlib常见绘图 1.matplotlib无法显示中文 2.散点图 3.条形图 4.直方图 matplotlib常见绘图 1.matplotlib无法显示中文 在…

    Python 2023年9月3日
    062
  • 【Docker系列】Python Flask + Redis 练习程序

    Python Flask + Redis 练习 两个容器,一个flask-demo,一个是redis-server在一个自定义网络bridge,相互 ping,不需要知道 ip,只…

    Python 2023年8月11日
    028
  • 学习笔记——美多商城——1 美多商城项目准备

    2022-10-23 步骤: 一、创建工程仓库 (1)在”码云”上创建一个仓库,在本地盘符中创建一个文件夹,右击,使用git,将远程仓库的内容克隆到本地仓库…

    Python 2023年10月31日
    032
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球