描述:
已事先建立好一个excel模板template,内含有一个图表,其原数据为两个系列。现通过自动化在vc中打开此模板,要求动态修改两个系列的原数据对应的区域,从而修改图表曲线。程序框架如下:
_Application app;
_Workbook book;
_Worksheet sheet;
_Chart chart;
Workbooks books;
Worksheets sheets;
LPDISPATCH lpDisp;
COleVariant covTrue((short)TRUE), covFalse((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox("创建Excel服务失败!");
return;
}
app.SetVisible(false);
char Path[MAX_PATH];
GetCurrentDirectory(MAX_PATH,Path);
CString strpath = Path;
strpath += "\\template";
books.AttachDispatch(app.GetWorkbooks(),true);
book.AttachDispatch(books.Add(_variant_t(strpath)));
//Get Sheets
lpDisp = book.GetWorksheets();
ASSERT(lpDisp);
sheets.AttachDispatch(lpDisp);
//Get sheet1
sheet.AttachDispatch(sheets.GetItem(COleVariant("sheet1")),true);
app.SetVisible(true);
//set Curve range
CString strIt1,strIt2;
Range rngTarget,rngPress;
strIt1.Format("%c%d",67,25); //67对应"C"
strIt2.Format("%c%d",71,25); //71对应""
rngTarget.AttachDispatch(sheet.GetRange(COleVariant(strIt1),COleVariant(strIt2)));
strIt1.Format("%c%d",67,30);
strIt2.Format("%c%d",71,30);
rngPress.AttachDispatch(sheet.GetRange(COleVariant(strIt1),COleVariant(strIt2)));
ChartObject chartObj;
ChartGroups cgps;
ChartGroup cgp;
SeriesCollection serclt;
Series se;
chartObj.AttachDispatch(sheet.ChartObjects(COleVariant((short)1)));
chartObj.SetRoundedCorners(TRUE);
chart.AttachDispatch(chartObj.GetChart());
se.AttachDispatch(chart.SeriesCollection(COleVariant((short)1)));
se.SetValues(rngPress.GetValue(vtMissing));
se.AttachDispatch(chart.SeriesCollection(COleVariant((short)2)));
se.SetValues(rngTarget.GetValue(vtMissing));
//release
......
目前只能做到这一步,这样图表显示两条曲线分别对应"C25:G25"和"C30:G30"数据。可是问题是这样并没有将图表数据系列和excel表格关联起来(可以打开图excel表数据属性中系列的y值查看)。请问如何编写程序将数据系列和表格动态关联?