c#调用Excel绘制图表
c#调用Excel需要引用命名空间
using Microsoft.Office.Interop.Excel;
由于该程序不复杂,主要是根据不同数据画表和图,画的图像也并不复杂,因为画图和画表的操作会重复使用,所以,我把画表和图的操作放在一个类中
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
namespace Excel
{
class SheetControl
{
Worksheet sheet;
public SheetControl(Worksheet sheet)
{
this.sheet = sheet;
} /// <summary>
/// 根据条件绘制图表
/// </summary>
/// <param name="rg">绘制图表的区域</param>
/// <param name="data">数据区域</param>
/// <param name="type">图表类型,XlChartType枚举类型</param>
/// <param name="xlrc">设置以行或者列为系列,XlRowCol枚举类型</param>
/// <param name="title">表格标题</param>
/// <param name="CategoryTitle">表格分类坐标名称,即横坐标名称</param>
/// <param name="ValueTitle">表格数据坐标的名称,即纵坐标名称</param>
public void CreateChart(Range rg, Range data, Object type = null, XlRowCol xlrc = XlRowCol.xlColumns, string title = null, string CategoryTitle = null, string ValueTitle = null)
{
ChartObjects charts = (ChartObjects)sheet.ChartObjects(Type.Missing);
ChartObject chartObj = charts.Add(rg.Left, rg.Top, rg.Width, rg.Height);
Chart chart = chartObj.Chart;
chart.ChartWizard(data, type, Type.Missing, xlrc, , , true, title, CategoryTitle, ValueTitle, Type.Missing);
chart.Legend.Position = XlLegendPosition.xlLegendPositionTop; } /// <summary>
/// 根据参数创建表格
/// </summary>
/// <param name="title">表格第一个单元格内容</param>
/// <param name="rows">行标题,每行的首个单元格内容</param>
/// <param name="cols">列标题,没列的首个单元格</param>
/// <param name="data">表格数据</param>
/// <param name="startRow">行开始位置</param>
/// <param name="startCol">列开始位置</param>
public void CreateTable(string title,string[] rows,string[] cols,string[,] data,int startRow,int startCol)
{
sheet.Cells[startRow, startCol] = title;
for (int i = ; i < cols.Length; i++)
{
sheet.Cells[startRow, i + startCol + ] = cols[i];
}
for (int i = ; i < rows.Length; i++)
{
sheet.Cells[i+startRow+,startCol]=rows[i];
for (int j = ; j < cols.Length; j++)
{
sheet.Cells[i + startRow + , j + startCol + ] = data[i, j];
}
}
}
/// <summary>
/// 设置表格的信息,包括边框,文字等
/// </summary>
public void SetType()
{ sheet.UsedRange.Font.Size = ;
sheet.UsedRange.Font.Name = "华文楷体";
sheet.UsedRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;//竖直居中
sheet.UsedRange.VerticalAlignment = XlVAlign.xlVAlignCenter;//水平居中
sheet.UsedRange.Borders.LineStyle = ;//边框
sheet.UsedRange.Columns.AutoFit();//列宽自适应
sheet.UsedRange.Rows.AutoFit();//行高自适应
//设置边框
sheet.UsedRange.BorderAround(XlLineStyle.xlDouble, XlBorderWeight.xlThick, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
}
}
}
设置一个Excel全局变量
public Microsoft.Office.Interop.Excel.Application myexcel;
设置数据并新建一个Excel画表和图
private void button1_Click(object sender, EventArgs e)
{
string[] rows = { "国家机关办公建筑","办公建筑","商场建筑","宾馆饭店建筑","文化建筑","医疗卫生建筑","体育建筑","综合建筑","教育建筑","其他建筑","总计"};
string[] cols = { "本月","上月" };
string[,] data ={{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""},
{"",""}}; DialogResult res = MessageBox.Show("是否生成 新的Excel ?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (res == DialogResult.Yes)
{ myexcel = new Microsoft.Office.Interop.Excel.Application();
myexcel.Application.Workbooks.Add(Type.Missing);
myexcel.Caption = "excel test";
myexcel.Visible = true;
Worksheet sheet = (Worksheet)myexcel.ActiveWorkbook.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
sheet.Name = "表2";
SheetControl sc = new SheetControl(sheet);
sc.CreateChart(sheet.get_Range("F2:O12"), sheet.get_Range((Range)sheet.Cells[, ], (Range)sheet.Cells[ + rows.Length - , + cols.Length]), XlChartType.xlColumnClustered, XlRowCol.xlColumns, "本月建筑能耗监测情况", null, "月度单位面积电耗");
//sheet.get_Range(sheet.Cells[2,2],sheet.Cells[2+rows.Length,2+cols.Length])
sc.CreateTable("建筑类型", rows, cols, data, , );
sc.SetType();
}
}
在创建一个Excel对象的时候是用
Microsoft.Office.Interop.Excel.Application myexcel = new Microsoft.Office.Interop.Excel.Application();
也可以用ApplicationClass来创建
其中Application和ApplicationClass的联系和区别
代码中使用Application接口,实际在初始化实例时,系统使用Application Class类来初始化Application对象。
Worksheets.Add方法介绍:
Worksheets 对象的 Add 方法:新建工作表、图表或宏表。新建的工作表将成为活动工作表。语法是:expression.Add(Before, After, Count, Type)
expression : 必需。该表达式返回上面的对象之一。
Before : Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之前。
After : Variant 类型,可选。指定工作表对象,新建的工作表将置于此工作表之后。
Count : Variant 类型,可选。要新建的工作表的数目。默认值为 1。
Type : Variant 类型,可选。指定工作表类型。
c#调用Excel绘制图表的更多相关文章
- Excel 绘制图表,如何显示横轴的数据范围
右键点击X坐标轴,然后选中“设置图表区域格式”,然后在“坐标轴选项”--“区域”处设置X轴范围. 备注,这种方式仅使用与第一列时日期时间类型的数据. 应用场景 当,选择有两列数据,第一列为横轴数据,第 ...
- DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- WinForm DevExpress使用之ChartControl控件绘制图表一——基础
最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...
- 使用Excel绘制F分布概率密度函数图表
使用Excel绘制F分布概率密度函数图表 利用Excel绘制t分布的概率密度函数的相同方式,可以绘制F分布的概率密度函数图表. F分布的概率密度函数如下图所示: 其中:μ为分子自由度,ν为分母自由度 ...
- Excel催化剂图表系列之品味IBCS瀑布图观察企业利润构成
IBCS图表,每个细节都值得反复琢磨参悟,此篇给大家送上详尽的瀑布图方式下的利润数据观察.请不要拿Excel2016版提供的瀑布图与IBCS版的瀑布图作对比,那完全不是一个级别的,可以类比为拿一辆经济 ...
- vue+echarts 动态绘制图表以及异步加载数据
前言 背景:vue写的后台管理,需要将表格数据绘制成图表(折线图,柱状图),图表数据都是通过接口请求回来的. 安装 cnpm install echarts --s (我这里用了淘宝镜像,不知道同学自 ...
- PHPExcel探索之旅---阶段三 绘制图表
利用PHPExcel插件进行绘制图表 <?php /** * 使用PHPExcel插件在excel文件中利用其中的数据建立折线图 * */ $dir = dirname(__FILE__); r ...
- Excel催化剂图表系列之一键完成IBCS国际商业标准图表
在数据分析领域,最后一公里的图表输出,是一片十分广阔的领域.一直以来,笔者深知不是这一方面的能手,学习上也仅仅是浅尝而止.没有往其深入研究并有所产出.很幸运地在数据圈子能够结识到其他的志同道合的伙伴, ...
- QCustomplot使用分享(九) 绘制图表-多功能游标
目录 一.概述 二.效果图 三.源码讲解 1.源码结构 2.头文件 3.添加游标 4.监测移动 5.移动游标 6.其他函数 四.测试方式 1.测试工程 2.测试文件 3.测试代码 五.相关文章 六.总 ...
随机推荐
- 对easyui datagrid进行扩展,当滚动条拉直最下面就异步加载数据。
以下方法是通用的,只要把datagrid定义为全局的即可,其他部分的代码不用进行修改! 可以把以下代码放入到一个单独的js文件,然后再需要的页面引入即可! $(function(){ try{ $(& ...
- maven pom.xml具体解释(整理)
pom作为项目对象模型. 通过xml表示maven项目,使用pom.xml来实现.主要描写叙述了项目:包含配置文件.开发人员须要遵循的规则,缺陷管理系统.组织和licenses,项目的url,项目的依 ...
- Oracle 用户、对象权限、系统权限
--================================ --Oracle 用户.对象权限.系统权限 --================================ 一.用户与模式 ...
- NVL函数(NVL,NVL2,NULLIF,COALESCE)
NVL 语法:NVL( expr1, expr2) 功能:如果expr1为NULL,则NVL函数返回expr2的值,否则返回expr1的值,如果两个参数的都为NULL ,则返回NULL. 注意事项:e ...
- linux oracle 设置随系统自动启动数据库实例和监听
在root账户下修改/etc/oratab 文件: # vi /etc/oratab 找到orcl=/db/app/oracle/product/11.1.0/db_1 :N这一行 改为: orcl= ...
- Ztree中simpleData是怎么转换成标准ztree数组对象的
今天遇到一个自己构造树的情况,树是动态的,预先不知道根节点,用的是easyUI中的tree,于是参考了下Ztree中的实现,恍然大悟,遂记之: transformTozTreeFormat: func ...
- Spring中的WebDataBinder浅析
Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int,String等).如果传递过来 ...
- 在mac中导入hadoop2.6.0源代码至eclipse
一.环境准备 1.安装jdk.maven等 2.下载hadoop源代码,并解压 3.将tools.jar复制到Classes中,具体原因见http://wiki.apache.org/hadoop/H ...
- Fun with dynamicobject dynamic and the settings table
What came before In my previous post I discussed ways of making the settings table using Generics to ...
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...