MSChart生成图表保存图片导入到Excel_第1页
MSChart生成图表保存图片导入到Excel_第2页
MSChart生成图表保存图片导入到Excel_第3页
MSChart生成图表保存图片导入到Excel_第4页
MSChart生成图表保存图片导入到Excel_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、mschart生成图表保存图片导入到excel少将第 1 页2021-11-11设计思路12实现步骤12.1使用mschart生成图表12.1.1注册控件12.1.2添加控件到工程22.1.3导入头文件22.1.4编写代码22.2将图表保存到剪贴板中62.3将剪贴板的图片保存为文件72.3.1剪贴板操作72.3.2保存图文为文件的方法72.4导出图片到excel92.4.1添加excel支持库92.4.2添加头文件92.4.3编写代码91设计思路1 使用mschart控件设计图表2 生成图表后调用其editcopy()方法将图片保存到剪贴版中3 打开剪贴板获取图片并将其保存为文件4 打开exc

2、el将图片插入到excel当中并插入统计数据2实现步骤2.1使用mschart生成图表2.1.1注册控件使用regsvr32命令注册控件2.1.2添加控件到工程工程à增加到工程à组件和控件à选择控件àinsert2.1.3导入头文件1在对话框头文件中加入:#include "mschart.h"2在对话框源文件中加入:#include "vcplot.h"#include "vcaxis.h"#include "vcvaluescale.h"#include "vc

3、seriescollection.h"#include "vcseries.h"#include "vcpen.h"#include "vccategoryscale.h"#include "vccolor.h"#include "vcdatagrid.h"#include "vcbackdrop.h"#include "vcfill.h"#include "vcbrush.h"#include "vcdatapoi

4、nts.h"#include "vcdatapoint.h"#include "vcdatapointlabel.h"#include "vcaxistitle.h"#include "math.h"#include "vcaxisgrid.h"#include "vcaxisscale.h"2.1.4编写代码1变量和函数定义:void drawchart(); void initmschart();void onchartline();void onchartco

5、mbi();void onchartpie();cmschart m_chart;2初始化和函数的实现:testmschartdlg:oninitdialog():/创建图表crect rc;getclientrect(&rc);rc.bottom-=50;m_chart.create("mschart", ws_child| ws_visible, rc, this, 10);initmschart();drawchart();initmschart():/初始化图表void ctestmschartdlg:initmschart()/ 设置标题m_chart.s

6、ettitletext("mschart 示例");/ 下面两句改变背景色m_chart.getbackdrop().getfill().setstyle(1);m_chart.getbackdrop().getfill().getbrush().getfillcolor().set(255, 255, 255); / 显示图例m_chart.setshowlegend(true);m_chart.setcolumn(1);m_chart.setcolumnlabel(lpctstr)"1号机");m_chart.setcolumn(2);m_chart

7、.setcolumnlabel(lpctstr)"2号机");m_chart.setcolumn(3);m_chart.setcolumnlabel(lpctstr)"3号机");/ 栈模式/m_chart.setstacking(true);/x轴设置m_chart.setrowcount(6);char buf32;for(int row=1;row<=6;+row)m_chart.setrow(row);sprintf(buf, "%d号", row);m_chart.setrowlabel(lpctstr)buf);va

8、riant varx;/ 不自动标注x轴刻度m_chart.getplot().getaxis(0,varx).getcategoryscale().setauto(false); / 每刻度一个标注m_chart.getplot().getaxis(0,varx).getcategoryscale().setdivisionsperlabel(1);/ 每刻度一个刻度线m_chart.getplot().getaxis(0,varx).getcategoryscale().setdivisionspertick(1); / x轴名称m_chart.getplot().getaxis(0,va

9、rx).getaxistitle().settext("日期"); / y轴设置variant vary;m_chart.getplot().getaxis(1,vary).getvaluescale().setauto(false); / 不自动标注y轴刻度m_chart.getplot().getaxis(1,vary).getvaluescale().setmaximum(100); / y轴最大刻度m_chart.getplot().getaxis(1,vary).getvaluescale().setminimum(0); / y轴最小刻度m_chart.getp

10、lot().getaxis(1,vary).getvaluescale().setmajordivision(5); / y轴刻度5等分m_chart.getplot().getaxis(1,vary).getvaluescale().setminordivision(1); / 每刻度一个刻度线m_chart.getplot().getaxis(1,vary).getaxistitle().settext("小时"); / y轴名称/ 3条曲线m_chart.setcolumncount(3);/ 线色m_chart.getplot().getseriescollecti

11、on().getitem(1).getpen().getvtcolor().set(0, 0, 255);m_chart.getplot().getseriescollection().getitem(2).getpen().getvtcolor().set(255, 0, 0);m_chart.getplot().getseriescollection().getitem(3).getpen().getvtcolor().set(0, 255, 0);/ 线宽(对点线图有效)m_chart.getplot().getseriescollection().getitem(1).getpen()

12、.setwidth(50);m_chart.getplot().getseriescollection().getitem(2).getpen().setwidth(100);m_chart.getplot().getseriescollection().getitem(3).getpen().setwidth(2);/ 数据点类型显示数据值的模式(对柱柱状图和点线图有效)/ 0: 不显示 1: 显示在柱状图外/ 2: 显示在柱状图内上方 3: 显示在柱状图内中间 4: 显示在柱状图内下方m_chart.getplot().getseriescollection().getitem(1).ge

13、tdatapoints().getitem(-1).getdatapointlabel().setlocationtype(1);m_chart.getplot().getseriescollection().getitem(2).getdatapoints().getitem(-1).getdatapointlabel().setlocationtype(1);m_chart.getplot().getseriescollection().getitem(3).getdatapoints().getitem(-1).getdatapointlabel().setlocationtype(1)

14、;/不要与x轴垂直的表格线 m_chart.getplot().getaxis(0,varx).getaxisgrid().getmajorpen().setstyle(0);/ no x grids/隐藏第二y轴,即右边的y轴 m_chart.getplot().getaxis(2,vary).getaxisscale().sethide(true);drawchart():/设置数据void ctestmschartdlg:drawchart()/*int nrowcount = 6;char buf32;srand( (unsigned)time( null ) );for(int ro

15、w = 1; row <= nrowcount; +row)m_chart.setrow(row);sprintf(buf, "%d号", row);m_chart.setrowlabel(lpctstr)buf);m_chart.getdatagrid().setdata(row, 1, rand() * 100 / rand_max, 0);m_chart.getdatagrid().setdata(row, 2, rand() * 100 / rand_max, 0);m_chart.getdatagrid().setdata(row, 3, rand() *

16、100 / rand_max, 0);*/for(int row=1;row<=6;+row)m_chart.getdatagrid().setdata(row, 1, 11*row, 0);m_chart.getdatagrid().setdata(row, 2, 22*row, 0);m_chart.getdatagrid().setdata(row, 3, 33*row, 0);m_chart.refresh(); /复制到剪贴板m_chart.editcopy();onbtnsave(); 设置图例类型/*3:曲线型;1:条形;14:饼图,0:三维显示,1:二维显示m_chart

17、.setcharttype(1|0) /2d柱(条)形,m_chart.setcharttype(0|0) /3d柱(条)形m_chart.setcharttype(1|2) /2d线条型m_chart.setcharttype(0|2) /3d线条型m_chart.setcharttype(1|4) /2d区域型m_chart.setcharttype(0|4) /3d区域型m_chart.setcharttype(1|6) /2d阶梯型m_chart.setcharttype(0|6) /3d阶梯型m_chart.setcharttype(1|8) /2d复(混)合型m_chart.set

18、charttype(0|8) /3d复(混)合型另外,在2d方式中,还有两类:饼型和xy型m_chart.setcharttype(14) /2d 饼型m_chart.setcharttype(16) /2dxy型*/ 折线图void ctestmschartdlg:onchartline() m_chart.setcharttype(3); drawchart();/ 柱状图 void ctestmschartdlg:onchartcombi() m_chart.setcharttype(1); drawchart();/ 饼状图void ctestmschartdlg:onchartpie

19、() m_chart.setcharttype(14); drawchart();2.2将图表保存到剪贴板中调用m_chart.editcopy()方法实现2.3将剪贴板的图片保存为文件2.3.1剪贴板操作/从剪贴板获得图片并保存到文件中if(openclipboard()hbitmap handle=(hbitmap)getclipboarddata(cf_bitmap);mysavebmptofile(handle,"c:a.bmp");closeclipboard();2.3.2保存图文为文件的方法/参数说明: hbmp :需保存的图象的句柄,path :保存路径vo

20、id ctestmschartdlg:mysavebmptofile(hbitmap hbmp,cstring path) /定义文件头结构 bitmapfileheader filehead; int fileheadlen = sizeof( bitmapfileheader );/定义图象信息结构bitmapinfoheader bmphead;int bmpheadlen =sizeof( bitmapinfoheader );/获取位图对象bitmap bmpobj;getobject( hbmp, sizeof(bitmap), &bmpobj );/文件总的字节大小dwo

21、rd filesizeinbyte; /获取系统颜色深度,即每个象素用多少位表示dword pixelsizeinbit; /系统屏幕设备描述表cdc srcdc; srcdc.createdc( "display", null, null, null);/获取每个像素所占位pixelsizeinbit=srcdc.getdevicecaps( bitspixel ) * srcdc.getdevicecaps( planes );/获取总的字节大小filesizeinbyte = fileheadlen + bmpheadlen + bmpobj.bmwidth*bmpo

22、bj.bmheight*pixelsizeinbit/8;/初始化文件头结构filehead.bfoffbits = fileheadlen + bmpheadlen;filehead.bfreserved1=0;filehead.bfreserved2=0;filehead.bfsize = filesizeinbyte;filehead.bftype = 0x4d42;/初始图像信息结构bmphead.bibitcount = pixelsizeinbit;bmphead.bicompression = bi_rgb;bmphead.biplanes = 1;bmphead.biheigh

23、t = bmpobj.bmheight;bmphead.biwidth = bmpobj.bmwidth;bmphead.bisize = bmpheadlen;/为文件分配空间pbyte pfile=new byte filesizeinbyte ;memset( pfile, 0, filesizeinbyte );/填充文件头部memcpy( pfile, (pbyte)&filehead, fileheadlen);/填充文件信息头部结构memcpy( pfile+fileheadlen, (pbyte)&bmphead, bmpheadlen);/填充象素部分getd

24、ibits( srcdc.m_hdc, hbmp, 0, bmpobj.bmheight, pfile+fileheadlen+bmpheadlen, (lpbitmapinfo)(pfile+fileheadlen), dib_rgb_colors);/打开文件并写入数据handle hfile;hfile=createfile( path, generic_write, 0, null, create_always, file_attribute_normal | file_flag_sequential_scan, null);if( hfile=invalid_handle_value

25、 )messagebox( "创建文件失败" ); return;dword nbytetransfered;writefile( hfile, pfile, filesizeinbyte, &nbytetransfered, null);closehandle( hfile );/清理delete pfile;srcdc.deletedc();2.4导出图片到excel2.4.1添加excel支持库查看à建立类向导àautomationàadd classàfrom a type libaray找到excel.exe添加所有

26、支持类2.4.2添加头文件#include "excel.h"#include "comdef.h"/使用com变量时需要使用2.4.3编写代码void ctestmschartdlg:onbtnexcel() / todo: add your control notification handler code here_application app;workbooks books;_workbook newbook;worksheets sheets;_worksheet newsheet;shapes m_oshapes;range range;colevariant vopt(long)disp_e_paramnotfound, vt_error); /启动应用程序if(!app.createdispatch("exc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论