MSChart生成图表保存图片导入到Excel资料文档格式.docx
- 文档编号:18837716
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:11
- 大小:18.76KB
MSChart生成图表保存图片导入到Excel资料文档格式.docx
《MSChart生成图表保存图片导入到Excel资料文档格式.docx》由会员分享,可在线阅读,更多相关《MSChart生成图表保存图片导入到Excel资料文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
VcAxisTitle.h"
math.h"
VcAxisGrid.h"
VcAxisScale.h"
2.1.4编写代码
1.变量和函数定义:
voidDrawChart();
voidinitmschart();
voidOnChartLine();
voidOnChartCombi();
voidOnChartPie();
CMSChartm_Chart;
2.初始化和函数的实现:
TestMSChartDlg:
:
OnInitDialog():
//创建图表
CRectrc;
GetClientRect(&
rc);
rc.bottom-=50;
m_Chart.Create("
mschart"
WS_CHILD|WS_VISIBLE,rc,this,10);
initmschart();
DrawChart();
initmschart():
//初始化图表
voidCTestMSChartDlg:
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.SetColumnLabel((LPCTSTR)"
1号机"
m_Chart.SetColumn
(2);
2号机"
m_Chart.SetColumn(3);
3号机"
//栈模式
//m_Chart.SetStacking(TRUE);
//X轴设置
m_Chart.SetRowCount(6);
charbuf[32];
for(introw=1;
row<
=6;
++row)
{
m_Chart.SetRow(row);
sprintf(buf,"
%d号"
row);
m_Chart.SetRowLabel((LPCTSTR)buf);
}
VARIANTvarX;
//不自动标注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,varX).GetAxisTitle().SetText("
日期"
//Y轴设置
VARIANTvarY;
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.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().GetSeriesCollection().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().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).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).GetDataPointLabel().SetLocationType
(1);
//不要与x轴垂直的表格线
m_Chart.GetPlot().GetAxis(0,varX).GetAxisGrid().GetMajorPen().SetStyle(0);
//noxgrids
//隐藏第二y轴,即右边的y轴
m_Chart.GetPlot().GetAxis(2,varY).GetAxisScale().SetHide(TRUE);
}
DrawChart():
//设置数据
DrawChart()
/*intnRowCount=6;
srand((unsigned)time(NULL));
for(introw=1;
row<
=nRowCount;
++row)
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()*100/RAND_MAX,0);
}*/
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.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.SetChartType(0|8)//3D复(混)合型
另外,在2D方式中,还有两类:
饼型和XY型
m_Chart.SetChartType(14)//2D饼型
m_Chart.SetChartType(16)//2DXY型
*/
//折线图
OnChartLine()
m_Chart.SetChartType(3);
DrawChart();
//柱状图
OnChartCombi()
m_Chart.SetChartType
(1);
//饼状图
OnChartPie()
m_Chart.SetChartType(14);
2.2将图表保存到剪贴板中
调用m_Chart.EditCopy()方法实现
2.3将剪贴板的图片保存为文件
2.3.1剪贴板操作
//从剪贴板获得图片并保存到文件中
if(OpenClipboard())
HBITMAPhandle=(HBITMAP)GetClipboardData(CF_BITMAP);
MySaveBmpTofile(handle,"
C:
\\a.bmp"
CloseClipboard();
2.3.2保存图文为文件的方法
//参数说明:
hbmp:
需保存的图象的句柄,path:
保存路径
MySaveBmpTofile(HBITMAPhbmp,CStringpath)
{
//定义文件头结构
BITMAPFILEHEADERfileHead;
intfileHeadLen=sizeof(BITMAPFILEHEADER);
//定义图象信息结构
BITMAPINFOHEADERbmpHead;
intbmpHeadLen=sizeof(BITMAPINFOHEADER);
//获取位图对象
BITMAPbmpObj;
GetObject(hbmp,sizeof(BITMAP),&
bmpObj);
//文件总的字节大小
DWORDfileSizeInByte;
//获取系统颜色深度,即每个象素用多少位表示
DWORDPixelSizeInBit;
//系统屏幕设备描述表
CDCsrcDC;
srcDC.CreateDC("
DISPLAY"
NULL,NULL,NULL);
//获取每个像素所占位
PixelSizeInBit=srcDC.GetDeviceCaps(BITSPIXEL)*srcDC.GetDeviceCaps(PLANES);
//获取总的字节大小
fileSizeInByte=fileHeadLen+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=BI_RGB;
bmpHead.biPlanes=1;
bmpHead.biHeight=bmpObj.bmHeight;
bmpHead.biWidth=bmpObj.bmWidth;
bmpHead.biSize=bmpHeadLen;
//为文件分配空间
PBYTEpFile=newbyte[fileSizeInByte];
memset(pFile,0,fileSizeInByte);
//填充文件头部
memcpy(pFile,(PBYTE)&
fileHead,fileHeadLen);
//填充文件信息头部结构
memcpy(pFile+fileHeadLen,(PBYTE)&
bmpHead,bmpHeadLen);
//填充象素部分
GetDIBits(srcDC.m_hDC,hbmp,0,bmpObj.bmHeight,pFile+fileHeadLen+bmpHeadLen,(LPBITMAPINFO)(pFile+fileHeadLen),DIB_RGB_COLORS);
//打开文件并写入数据
HANDLEhFile;
hFile=CreateFile(path,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_SEQUENTIAL_SCAN,NULL);
if(hFile==INVALID_HANDLE_VALUE)
MessageBox("
创建文件失败"
);
return;
DWORDnByteTransfered;
WriteFile(hFile,pFile,fileSizeInByte,&
nByteTransfered,NULL);
CloseHandle(hFile);
//清理
deletepFile;
srcDC.DeleteDC();
2.4导出图片到Excel
2.4.1添加Excel支持库
查看建立类向导AutomationAddClassFromatypelibaray…
找到Excel.exe添加所有支持类
2.4.2添加头文件
excel.h"
comdef.h"
//使用COM变量时需要使用
2.4.3编写代码
OnBtnexcel()
//TODO:
Addyourcontrolnotificationhandlercodehere
_Applicationapp;
Workbooksbooks;
_WorkbooknewBook;
Worksheetssheets;
_WorksheetnewSheet;
Shapesm_oShapes;
Rangerange;
COleVariantvOpt((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
//启动应用程序
if(!
app.CreateDispatch("
Excel.Application"
))
{
AfxMessageBox("
Can’tstartExcelserver!
"
}
//设置应用程序可见
app.SetVisible(true);
//获取工作薄集合
books=app.GetWorkbooks();
//打开一个工作薄
/*newBook=books.Open("
\\mynew.xls"
vOpt,vOpt,vOpt,vOpt,vOpt,
vOpt,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("
),false,true,0,0,500,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();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSChart 生成 图表 保存 图片 导入 Excel 资料