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.测试代码 五.相关文章 六.总 ...
随机推荐
- 使用VTemplate模板引擎动态生成订单流程图
1.VTemplate模板引擎的简介 VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象.当VTemplate ...
- RouteHttpMap要添加的引用
System.Web.Routing.RouteCollection' does not contain a definition for 'MapHttpRoute' 此错的解决方式是添加 Syst ...
- .NET技术
1.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别.回答要点:说明详细的空间分配.(10分) 解:string str=null ...
- web 安全 初探 (正在更新)
1.web应用程序所采用的防卫机制的几个核心构成:1.处理用户对应用程序的数据和功能的访问,以防止用户未经授权访问.2.处理用户的输入,以防止恶意的输入导致未预期的行为.3.处理攻击,以确保应用程序在 ...
- C#通过文件路径截取对应的文件夹路径
try { OpenFileDialog openFileDialog = new OpenFileDialog(); string str = comboBox_hexFilePath.Text ...
- 【转】10 个迅速提升你 Git 水平的提示
最近我们推出了两个教程:熟悉Git的基本功能和让你在开发团队中熟练的使用Git . 我们所讨论的命令足够一个开发者在Git使用方面游刃有余.在这篇文章中,我们试图探索怎样有效的管理你的时间和充分的使用 ...
- 条形码/二维码之开源利器ZXing图文介绍
全文目录: 基本介绍 二维码(比如:QRCode)的编码和解码演示 条形码(比如:EAN-13)的编码和解码演示 [一]. 基本介绍 : 1-1. ZXing是一个开源Java类库用于解析多种格式的条 ...
- Constructing Roads--hdu1102
Constructing Roads Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HoG SVM 目标检测分析
前一段时间开始了解HoG跟SVM行人识别,看了很多包括Dalal得前辈的文章及经验分享,对HoG理论有了些初步的认识. HoG 的全称是 Histogram of Oriented Gradient, ...
- async 异步流程控制规则
github 学习async网址 : https://github.com/caolan/async/ 1.Async 函数介绍 async 主要实现了三个部分的流程控制功能 1.集合:Collect ...