欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    MSChart生成图表保存图片导入到Excel.docx

    • 资源ID:16044931       资源大小:18.84KB        全文页数:15页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MSChart生成图表保存图片导入到Excel.docx

    1、MSChart生成图表保存图片导入到ExcelMSChart生成图表保存图片导入到Excel少将 第 1 页 2018-9-211设计思路 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导出图片到Excel 92.4.1添加Excel支持库 92.4.2添加头文件 92.4.3编写代码 91设计思路1 使用MSChart控件设计图表2 生成图表后调用其EditCopy

    2、()方法将图片保存到剪贴版中3 打开剪贴板获取图片并将其保存为文件4 打开Excel将图片插入到Excel当中并插入统计数据2实现步骤2.1使用MSChart生成图表2.1.1注册控件使用regsvr32命令注册控件2.1.2添加控件到工程工程增加到工程组件和控件选择控件Insert2.1.3导入头文件1在对话框头文件中加入:#include mschart.h2在对话框源文件中加入:#include VcPlot.h#include VcAxis.h#include VcValueScale.h#include VcSeriesCollection.h#include VcSeries.h#

    3、include VcPen.h#include VcCategoryScale.h#include VcColor.h#include VcDataGrid.h#include VcBackdrop.h#include VcFill.h#include VcBrush.h#include VcDataPoints.h#include VcDataPoint.h#include VcDataPointLabel.h#include VcAxisTitle.h#include math.h#include VcAxisGrid.h#include VcAxisScale.h2.1.4编写代码 1变

    4、量和函数定义: void DrawChart(); void initmschart(); void OnChartLine(); void OnChartCombi(); 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();init

    5、mschart():/初始化图表void CTestMSChartDlg:initmschart() / 设置标题 m_Chart.SetTitleText(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.SetColu

    6、mnLabel(LPCTSTR)1号机); m_Chart.SetColumn(2); m_Chart.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.SetRo

    7、wLabel(LPCTSTR)buf); VARIANT 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

    8、_Chart.GetPlot().GetAxis(0,varX).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);

    9、 / Y轴最小刻度 m_Chart.GetPlot().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().G

    10、etSeriesCollection().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()

    11、.GetItem(1).GetPen().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().GetSeries

    12、Collection().GetItem(1).GetDataPoints().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).GetDataPoi

    13、ntLabel().SetLocationType(1); /不要与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( (u

    14、nsigned)time( NULL ) ); for(int row = 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().S

    15、etData(row, 3, rand() * 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:

    16、条形;14:饼图,0:三维显示,1:二维显示 m_Chart.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.

    17、SetChartType(1|8) /2D复(混)合型 m_Chart.SetChartType(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); DrawCh

    18、art();/ 饼状图void CTestMSChartDlg:OnChartPie() 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保存图文为文件的

    19、方法/参数说明: hbmp :需保存的图象的句柄,path :保存路径void CTestMSChartDlg:MySaveBmpTofile(HBITMAP hbmp,CString path) /定义文件头结构 BITMAPFILEHEADER fileHead; int fileHeadLen = sizeof( BITMAPFILEHEADER ); /定义图象信息结构 BITMAPINFOHEADER bmpHead; int bmpHeadLen =sizeof( BITMAPINFOHEADER ); /获取位图对象 BITMAP bmpObj; GetObject( hbmp,

    20、 sizeof(BITMAP), &bmpObj ); /文件总的字节大小 DWORD fileSizeInByte; /获取系统颜色深度,即每个象素用多少位表示 DWORD PixelSizeInBit; /系统屏幕设备描述表 CDC srcDC; srcDC.CreateDC( DISPLAY, NULL, NULL, NULL); /获取每个像素所占位 PixelSizeInBit=srcDC.GetDeviceCaps( BITSPIXEL ) * srcDC.GetDeviceCaps( PLANES ); /获取总的字节大小 fileSizeInByte = fileHeadLen

    21、 + bmpHeadLen + bmpObj.bmWidth*bmpObj.bmHeight*PixelSizeInBit/8; /初始化文件头结构 fileHead.bfOffBits = fileHeadLen + bmpHeadLen; fileHead.bfReserved1=0; fileHead.bfReserved2=0; fileHead.bfSize = fileSizeInByte; fileHead.bfType = 0x4D42; /初始图像信息结构 bmpHead.biBitCount = PixelSizeInBit; bmpHead.biCompression =

    22、 BI_RGB; bmpHead.biPlanes = 1; bmpHead.biHeight = 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+fileHe

    23、adLen, (PBYTE)&bmpHead, bmpHeadLen); /填充象素部分 GetDIBits( 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_S

    24、EQUENTIAL_SCAN, NULL); if( hFile=INVALID_HANDLE_VALUE ) MessageBox( 创建文件失败 ); return; DWORD nByteTransfered; WriteFile( hFile, pFile, fileSizeInByte, &nByteTransfered, NULL); CloseHandle( hFile ); /清理 delete pFile; srcDC.DeleteDC();2.4导出图片到Excel2.4.1添加Excel支持库查看建立类向导AutomationAdd ClassFrom a type li

    25、baray找到Excel.exe添加所有支持类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 rang

    26、e; COleVariant vOpt(long)DISP_E_PARAMNOTFOUND, VT_ERROR); /启动应用程序 if(!app.CreateDispatch(Excel.Application) AfxMessageBox(Cant start Excel server!); return; /设置应用程序可见 app.SetVisible(true); /获取工作薄集合 books = app.GetWorkbooks(); /打开一个工作薄 /*newBook=books.Open(C:mynew.xls,vOpt, vOpt, vOpt, vOpt, vOpt, vO

    27、pt, vOpt, vOpt, vOpt, vOpt,vOpt, vOpt,vOpt,vOpt); */ newBook=books.Add(vOpt); /获取Sheets sheets = newBook.GetSheets(); /打开一个Sheet newSheet = sheets.GetItem(COleVariant(short)1); /获取形状Shape m_oShapes.AttachDispatch(newSheet.GetShapes(); /加载一幅图片到指定的位置 m_oShapes.AddPicture(_T(C:a.bmp),false,true,0,0,500

    28、,300); /设置数据 range.AttachDispatch(newSheet.GetCells(),true); range.SetItem(_variant_t(long)23),_variant_t(long)1),_variant_t(周悦芬); newBook.SetSaved(true); app.ReleaseDispatch(); books.ReleaseDispatch(); newBook.ReleaseDispatch(); sheets.ReleaseDispatch(); newSheet.ReleaseDispatch(); m_oShapes.ReleaseDispatch(); range.ReleaseDispatch();


    注意事项

    本文(MSChart生成图表保存图片导入到Excel.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开