调用office的Excel制作统计图,并保存成图片

news/2024/11/1 8:42:31/
public class CMSChart{private Chart chart;public CMSChart(Chart chart){this.chart = chart;}/// <summary>/// 保存图片/// </summary>/// <param name="fullPicName"></param>public void SaveAs(string fullPicName){ChartImageFormat format = ChartImageFormat.Jpeg;string ext = fullPicName.Substring(fullPicName.LastIndexOf('.') + 1);switch (ext.ToLower()){case "bmp": format = ChartImageFormat.Bmp; break;case "jpg": format = ChartImageFormat.Jpeg; break;case "png": format = ChartImageFormat.Png; break;case "tif": format = ChartImageFormat.Tiff; break;case "emf": format = ChartImageFormat.Emf; break;}chart.SaveImage(fullPicName, format);}/// <summary>/// /// </summary>/// <param name="dt">数据表,不能为空</param>/// <param name="xField">x轴数据字段,只有1个</param>/// <param name="yFields">y轴数据字段,多个</param>/// <param name="yTypes"></param>/// <param name="yTitles"></param>/// <param name="colors"></param>/// <param name="xTitle"></param>/// <param name="yTitle"></param>/// <param name="title"></param>/// <returns></returns>public bool ShowChart(DataTable dt, string xField, string[] yFields, string[] yTypes, string[] yTitles, Color[] colors, string xTitle, string yTitle, string title){bool result = false;try{chart.Titles.Clear();Title t = new Title(title, Docking.Top);chart.Titles.Add(title);chart.ChartAreas.Clear();chart.Series.Clear();ChartArea area = new ChartArea();//绘图区域高/宽相对于图表的高/宽的百分比area.Position.Height = 52;area.Position.Width = 96;//绘图区域起始位置坐标相对于图表高/宽的百分比area.Position.X = 2;area.Position.Y = 16;area.Name = "area" + yTitles;area.AxisX.Title = xTitle;area.AxisX.TitleAlignment = StringAlignment.Far;int Interval = dt.Rows.Count / 12;if (Interval < 1)Interval = 1;area.AxisX.Interval = Interval;area.AxisY.Title = yTitle;area.AxisX.MajorGrid.Enabled = false;area.AxisY.MajorGrid.Enabled = false;                chart.ChartAreas.Add(area);double min = double.MaxValue, max = double.MinValue;for (int i = 0; i < yFields.Length; i++){                    Series series = new Series();series.Color = colors[i];series.Name = yTitles[i];                    switch (yTypes[i]){case "line": series.ChartType = SeriesChartType.Line;series.BorderWidth = 2;break;case "column": series.ChartType = SeriesChartType.Column; break;}foreach (DataRow row in dt.Rows){if (!Convert.IsDBNull(row[yFields[i]])){int x = Convert.ToInt32(row[xField]);double y = Convert.ToDouble(row[yFields[i]]);DataPoint p = new DataPoint(x, y);series.Points.Add(p);if (y > max)max = y;if (y < min)min = y;}}if (min > 0){double cha = max - min;if (cha < min * 0.3)area.AxisY.Minimum = Math.Round(min * 0.7, 0);}else if (max < 0){ }series.ChartArea = area.Name;series.LabelToolTip = string.Format("年:#VALX\r\n{0}:#VAL", yTitles[i]);series.ToolTip = string.Format("年:#VALX\r\n{0}:#VAL", yTitles[i]);                   chart.Series.Add(series);                    }}catch (Exception ex){ErrorManager.AddErrorToLog(ex);result = false;}return result;}/// <summary>/// /// </summary>/// <param name="dt"></param>/// <param name="xField"></param>/// <param name="yFields"></param>/// <param name="yTypes"></param>/// <param name="yTitles"></param>/// <param name="colors"></param>/// <param name="xTitle"></param>/// <param name="yTitle"></param>/// <param name="title"></param>/// <param name="fullPicName"></param>/// <returns></returns>public bool CreatePic(DataTable dt, string xField, string[] yFields, string[] yTypes, string[] yTitles, Color[] colors, string xTitle, string yTitle, string title, string fullPicName){bool result = false;try{ShowChart(dt, xField, yFields, yTypes, yTitles, colors, xTitle, yTitle, title);SaveAs(fullPicName);}catch (Exception ex){ErrorManager.AddErrorToLog(ex);result = false;}return result;}}

excel格式设置:
在这里插入图片描述


http://www.ppmy.cn/news/658997.html

相关文章

AngularJS 0005:作用域

angularJS中有一个重要的属性Scope&#xff0c;作用域。 web编程中&#xff0c;我们需要获取页面中的某个控件&#xff0c;某个属性&#xff0c;一般我们都用到document或者类似的一个对象来获取整个表单的内容。 在angularJS中&#xff0c; Scope(作用域) 是应用在 HTML (视…

Vulnhub靶机 VULNOS: 2 writeup

下载地址&#xff1a;https://www.vulnhub.com/entry/vulnos-2,147/ 信息搜集 获取IP地址 扫描端口 80端口 点击website跳转到/jabc 在 jabc/?qnode/7 页面看起来啥也没有&#xff0c;但是CtrlA全选之后看到提示还有一个目录 /jabcd0cs/ 访问/jabcd0cs/ 在/jabcd0cs/发现…

MySQL:replace函数的几种实用场景,一个回答引发热烈讨论

| 7 | 疾风剑豪 | 亚索 | 6300 | —---------------------------------- 7 rows in set (0.00 sec) []()使用场景1 – (Query语句)&#xff1a;---------------------------------------------------------------------------------需求&#xff1a;把"hero\_title"…

MySQL:replace函数的几种实用场景

MySQL的Replace函数都有哪些用法&#xff0c;你是否都知晓呢&#xff1f;今天&#xff0c;让我带大家花几分钟时间来一起看一看&#xff0c;记得Mark&#xff01; 目录 REPLACE语法操作实例使用场景1 -- (Query语句)&#xff1a;使用场景2 -- (update语句)&#xff1a;使用场景…

MySQL最左匹配原则,道儿上兄弟都得知道的原则

自MySQL5.5版本起&#xff0c;主流的索引结构转为B树。B树的节点存储索引顺序是从左向右存储&#xff0c;在检索匹配的时候也要满足自左向右匹配。 目录 一、最左匹配原则的原理二、违背最左原则导致索引失效的情况三、查询优化器偷偷干了哪些事儿四、需要你mark的知识点1、如何…

【图文详解:索引极简教程】SQL 查询性能优化原理

简介 在一本厚厚的书籍的前几页&#xff0c;通常会有几页目录。作用是让读者可以快速找到感兴趣的章节进行阅读。 目录之所以可以快速阅读&#xff0c;是因为它提前进行了结构化有序处理。 同样的道理&#xff0c;数据库的数据表的文件下面(以 ClickHouse 为例)&#xff0c;通常…

触摸精灵 关于三剑豪手游的练级(练到10级) 制作 请大家帮忙一下!!谢谢大家了

SCREEN_RESOLUTION"768x1024"; SCREEN_COLOR_BITS32;-- 主入口 function main()rotateScreen(0);mSleep(1583);touchDown(11, 237, 808)mSleep(121);touchUp(11)mSleep(1000);touchDown(1, 673, 953)mSleep(151);touchUp(1)mSleep(1000);touchDown(11, 238, 816)mSle…

MySQL的order by该如何避免“未命中索引“

不少同学私信我说&#xff0c;用Explain查看Order By语句执行计划时经常发现用不上索引&#xff0c;难道花好多时间和资源创建的联合索引都摆烂了&#xff1f;今天我把几个同学遇到的情况整理出来&#xff0c;做一个Order By使用索引的坑点分享。希望对你有用。 要学会如何使用…