MFC中如何利用Excel ChartWizard生成图表?(在线等)
一下使我写的代码
其中,chartPtr->ChartWizard(source, Gallery, Format, PlotBy, CategoryLabels,
SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle, lcid);
参数source有问题,我不知道怎么把source数据传给ChartWizard,
那位高手指点一下,小弟这里感激不尽。
**********************************************************************
HRESULT
Excel2003Report::createReport()
{
try
{
// create an Excel2003 application
HRESULT hr = m_pExcelApp.CreateInstance(__uuidof(Excel2003::Application));
if (hr != S_OK) return hr;
m_pExcelApp->SheetsInNewWorkbook[0] = 1;
// get workbooks
Excel2003::WorkbooksPtr pWorkbooks;
pWorkbooks = m_pExcelApp->GetWorkbooks();
m_pWorkbook = pWorkbooks->Add();
// get the worksheet and cells
m_pWorksheet = m_pWorkbook->GetActiveSheet();
if (m_pWorksheet == NULL)
{
return E_FAIL;
}
// try to activate the sheet
hr = m_pWorksheet->Activate();
// DEBUG
// get the cells
m_pSheetRange = m_pWorksheet->GetCells();
if (m_pSheetRange == NULL)
{
return E_FAIL;
}
m_pActiveRange = m_pWorksheet->GetRange("A1","A1");
if (m_pActiveRange == NULL)
{
return E_FAIL;
}
// get the pictures
m_pPictures = m_pWorksheet->Pictures();
}
catch(...)
{}
return S_OK;
}
void
Excel2003Report::saveAs( const _bstr_t & name )
{
if ("" == name)
return;//through exception
try
{
m_pWorkbook->SaveAs( name, // file name
(long)Excel2003::xlNormal, // file format
_bstr_t(""), // password
_bstr_t(""), // write res password
false, // readonly recommended
false, // create backup
Excel2003::xlNoChange, // xlExclusive access mode
(long)Excel2003::xlUserResolution ); // conflict resolution
}
catch(...)
{}
}
HRESULT
Excel2003Report::generateChart(double xPos, double yPos, double width, double height)
{
HRESULT hr = S_OK;
//set value
_variant_t cellData = 1;
m_pActiveRange = m_pWorksheet ->GetRange("A1","D1");
setCellData(cellData);
//get range value
m_pSheetRange = m_pActiveRange;
if (NULL == m_pSheetRange)
return E_FAIL;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
LPDISPATCH lpDisp;
//Create a ChartObject Collection for the Worksheet
Excel2003::ChartObjectsPtr chartObjsPtr = m_pWorksheet->ChartObjects();
Excel2003::ChartObjectPtr chartObjPtr = chartObjsPtr->Add(xPos, yPos, width, height);
Excel2003::_ChartPtr chartPtr = chartObjPtr->GetChart();
_variant_t source ;
source.vt = VT_DISPATCH;
source.pdispVal = m_pSheetRange;
_variant_t Gallery = XlChartType::xlPie;
_variant_t Format =1;
_variant_t PlotBy = XlRowCol::xlRows;
_variant_t CategoryLabels = 0;
_variant_t SeriesLabels = 1;
_variant_t HasLegend = true;
_variant_t Title = "title";
_variant_t CategoryTitle = "CategoryTitle";
_variant_t ValueTitle = "ValueTitle";
_variant_t ExtraTitle = "ExtraTitle";
long lcid = 0;
chartPtr->ChartWizard(source, Gallery, Format, PlotBy, CategoryLabels,
SeriesLabels, HasLegend, Title, CategoryTitle, ValueTitle, ExtraTitle, lcid);
return hr;
}
void
Excel2003Report::setCellData(_variant_t data)
{
m_pActiveRange->PutValue2( data );
// autofit the column size
Excel2003::RangePtr pColumnRange = m_pActiveRange->GetEntireColumn();
pColumnRange->AutoFit();
}