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

news2024/10/7 19:22:27
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.coloradmin.cn/o/705766.html

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

相关文章

VMware 虚拟机安装 CentOS 8

一、准备 演示过程使用的软件版本如下&#xff1a; VMware 16.2.5 build-20904516 CentOS 8.5.2111-x86_64-dvd1.iso VMware 下载安装请参考&#xff1a;VMware16.x 下载与安装 CentOS 镜像下载请参考&#xff1a;CentOS 各版本镜像下载 VMware 15 及以下版本&#xff0c;不支…

nginx部署本地项目如何让异地公网访问?服务器端口映射配置!

接触过IIS或apache的小伙伴们&#xff0c;对nginx是比较容易理解的&#xff0c;nginx有点类似&#xff0c;又有所差异&#xff0c;在选择使用时根据自己本地应用场景来部署使用即可。通过一些对比可能会更加清楚了解&#xff1a; 1.nginx是轻量级&#xff0c;比apache占用更少…

C# 多数元素

169 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&…

FPGA USB FX2 数据回环试验 驱动CY7C68013A实现 提供工程源码和技术支持

目录 1、前言2、我这儿已有的 FPGA USB 通信方案3、CY7C68013A芯片解读和硬件设计FX2 简介SlaveFIFO模式及其配置 4、工程详细设计方案5、vivado工程6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 目前USB2.0的实现方案很多&#xff0c;但就简单好用的角度而言&a…

kkfileview部署使用

1.gitee下载源码 kkFileView: 使用spring boot打造文件文档在线预览项目解决方案&#xff0c;支持doc、docx、ppt、pptx、wps、xls、xlsx、zip、rar、ofd、xmind、bpmn 、eml 、epub、3ds、dwg、psd 、mp4、mp3以及众多类文本类型文件在线预览 2.去掉cad 3.替换水印字体为免费…

php宝塔搭建好用的二次元图系统php源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。本期给大家带来一套好用的二次元图系统php源码。抽时间看了一下&#xff0c;功能还是不错的&#xff0c;有参考价值。感兴趣的朋友可以自行下载学习。 技术架构 PHP7.0 nginx mysql5.7 JS CSS HTMLcnetos7以…

德国汽车行业杂志HANSERautomotive就浪潮信息算法团队在自动驾驶领域所取得的核心突破,进行专题署名报道

近日&#xff0c;德国专业汽车行业杂志HANSERautomotive就浪潮信息算法团队在自动驾驶领域所取得的核心突破&#xff0c;进行专题署名文章报道“Wahrnehmungssysteme und 3D-Objekterkennung Alles im Blick ”(《感知系统和三维物体识别&#xff0c;一切尽收眼底》)。针对AI感…

python ---- 根据文件名称中的数字排序

1. 需求分析 获取文件夹中的所有文件名称&#xff1b;筛选所有文件名称中的图片文件&#xff1b;获取图片文件名称中的数字&#xff1b;对数字排序&#xff1b;返回排序后的图片文件名称列表。 2. 获取所有图片文件名称 2.1 代码实现分析 使用 os.listdir 获取文件夹下的所…

keil_arm满减栈应用场景

.text .global _start _start:满减压栈使用场景ldr sp,0x40000800mov r0,#0x1mov r1,#0x2bl add1_funcadd r0,r0,r1 r0 r0 r1 0x3b stopadd1_func: 压栈保存现场 r0 0x1 r1 0x2stmfd sp!,{r0,r1&#xff0c;lr}mov r0,#0x3mov r1,#0x4bl add2_funcadd r0,r0,r1 r0 r…

如何在Windows中批量创建多个文件夹

你需要更好地组织你的文件和文档吗&#xff1f;如果你在笔记本电脑或台式机上将相关文件分组到不同的文件夹中&#xff0c;那么总是很容易找到你需要的东西。你还可以更改图标的大小&#xff0c;使其在视觉上更美观。 在 Windows 中创建一个文件夹的传统做法是&#xff1a;右键…

【GlobalMapper精品教程】060:用dem提取一条线的高程值

本实验使用的数据有线路数据(line.shp)和数字地形数据(dem.tif),提取线数据的高程值。 文章目录 一、加载实验数据二、生成路径剖面三、导出线路高程四、注意事项【参考阅读】:【ArcGIS微课1000例】0004:值提取至点(Extract value to point) 一、加载实验数据 本实验…

NLP学习笔记(三)

一&#xff1a;分类方法 &#xff08;一&#xff09;逻辑回归 最简单的方法就是将分类问题视为回归问题&#xff0c;采用逻辑回归计算分类的边界。 &#xff08;二&#xff09;softmax回归 softmax的前向传播过程可以分为以下三步&#xff1a; h W T x y ^ s o f t m a …

springboot基于keytool实现https的双向认证

一、环境准备 服务器信息如下&#xff1a; 操作系统说明server-one服务器1server-two服务器2 二、keytool命令解释 -genkey 表示要创建一个新的密钥。 -alias 表示 keystore 的别名。 -keyalg 表示使用的加密算法是 RSA &#xff0c;一种非对称加密算法。 -keysize 表示密…

ubuntu 基础软件

文章目录 一.通过.deb 安装的软件1.谷歌浏览器2.utools3.wps4.VScode5.typora6.搜狗输入法的安装 二.通过命令行安装的软件1.截图工具2.超级终端3.安装 git4.安装net-tools5.安装tree 三.ubuntu的基础设置1.更改软件安装源头2.修改计算机名称 一.通过.deb 安装的软件 下面 .deb…

SpringBoot-集成FTP(上传、下载、删除)

目录 一、引入依赖 二、配置文件 三、Controller层 四、Service层 五、相关工具类 由于服务在内网部署&#xff0c;需要使用ftp服务器管理文件&#xff0c;总结如下 一、引入依赖 <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> <depen…

基于XDMA 中断模式的 PCIE 上位机与FPGA数据交互架构 提供工程源码和QT上位机源码

目录 1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案图像产生、发送、缓存数据处理XDMA简介XDMA中断模式图像读取、输出、显示QT上位机及其源码 5、vivado工程详解6、上板调试验证7、福利&#xff1a;工程代码的获取 1、前言 PCIE&#xff08;PCI Express&#…

SAP从入门到放弃系列之可用性检查-订单物料可用性检查-Part2

文章目录 一、概述二、物料可用性检查如何锁定库存2.1实现思路2.2系统设置关键点 三、系统测试数据3.1、勾选含预留选项的测试效果3.2、含相关预留3.2.1含相关预留-排除3.2.2含相关预留-仅可领料3.2.3含相关预留-全部 四、最后总结&#xff1a; 一、概述 物料可用性检查最终的…

【Linux】shell中快速遍历所有文件下匹配的内容

目录 1.举例 2.find命令 2.1. find命令作用 2.2. find命令选项基本格式 2.3. 常用选项 2.4. 常用动作 2.5. 根据文件名进行匹配 2.5.2 在/home目录下查找以.txt结尾的文件名 2.5.3 同上&#xff0c;但忽略大小写 2.5.4 查找 /home/ 下所有以.txt或.pdf结尾的文件…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

Linux下安装/使用mariadb

文章目录 第一章&#xff1a;mariadb在rhel7上的使用第二章&#xff1a;mariadb在rhel6上的安装&#xff08;1&#xff09;编译源码包&#xff08;比较慢&#xff09;&#xff08;2&#xff09;二进制包安装&#xff08;比较推荐&#xff09; 第一章&#xff1a;mariadb在rhel7…