VBA宏定义如下:
ActiveSheet.ChartObjects("图表 2").Activate ActiveChart.PlotArea.Select ActiveSheet.ChartObjects("图表 1").Activate ActiveChart.PlotArea.Select
#include "excel8.h" void CChartView::OnInsertChart() { CChartCntrItem* pItem = NULL; //获取与视图相关的文档 CChartDoc* pDoc = GetDocument(); //创造一个新项(COleClientItem),代表新插入的OLE对象 pItem = new CChartCntrItem(pDoc); //插入一个Excel图表 CLSID clsid; ::CLSIDFromProgID(L"Excel.Chart",&clsid); pItem->CreateNewItem(clsid); //为新增的图标准备显示区域 CRect rectView; this->GetClientRect(&rectView); //得到OLE对象(EXCEL图表)的调度接口,以便对之进行自动化控制 LPDISPATCH lpDisp; lpDisp = pItem->GetIDispatch(); COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR); _Workbook oBook; oBook.AttachDispatch(lpDisp); //获取工作表和图表 Worksheets oSheets = oBook.GetWorksheets(); //获取工作簿的第一张工作表 _Worksheet oSheet = oSheets.GetItem(COleVariant((short)1)); BeginWaitCursor(); Charts oCharts = oBook.GetCharts(); //在自动化过程隐藏图表 oSheet.SetVisible(FALSE); //获取工作簿的图表 _Chart oChart = oCharts.GetItem(COleVariant((short)1)); //清除工作表上的所有数据 Range oRng = oSheet.GetCells(); oRng.Clear(); //设置第一列标题 oRng = oSheet.GetRange(COleVariant("A1"), vOpt); oRng.SetValue(COleVariant("月份")); //设置第二列标题 oRng = oSheet.GetRange(COleVariant("B1"), vOpt); oRng.SetValue(COleVariant("销售额")); //设置第一列的数据:月份 CString tmp,rg; //设置A2到A13的单元内容 for(int i=1;i<=12;i++) { tmp.Format("%d月份",i); rg.Format("A%d:A%d",i+1,i+1); oRng = oSheet.GetRange(COleVariant(rg), vOpt); oRng.SetValue(COleVariant(tmp)); } //设置第二列数据 oRng = oSheet.GetRange(COleVariant("B2:b13"), vOpt); //设置每个单元格的内容为=RAND()*10000 oRng.SetFormula(COleVariant("=RAND()*10000")); //设置图表类型为三维圆饼图xl3DPieExploded oChart.SetChartType((long)70); //设置数据源区域 oRng = oSheet.GetRange(COleVariant("A1:B13"), vOpt); //数据序列产生在列xlColumns=2 oChart.SetSourceData(oRng, COleVariant((short)2)); //加入图标标题 oChart.SetHasTitle(TRUE); ChartTitle oChartTtl = oChart.GetChartTitle(); oChartTtl.SetText("<-销售收入分月统计图->"); oChartTtl.SetShadow(TRUE); //不使用图例 oChart.SetHasLegend(FALSE); //设置图表区的背景颜色 PlotArea oPlot = oChart.GetPlotArea();
