У меня проблема с добавлением диаграмы на лист Excel, конкретно: не могу получить коллекцию диаграм. То есть, если в ВБ можно сделать так:
Dim chs As ChartObjects
Set chs = Worksheets("sheet1").ChartObjects, то при работе в VC++ имею в распоряжении лишь функцию LPDISPATCH _Worksheet::ChartObjects(const VARIANT& Index), т.е. с параметром. Но если на листе нет диаграм, как их добавлять, если я не могу получить пустую коллекцию?
заранее, спасибо.
Здравствуйте, Unformica, Вы писали:
U>У меня проблема с добавлением диаграмы на лист Excel, конкретно: не могу получить коллекцию диаграм. То есть, если в ВБ можно сделать так:
U>Dim chs As ChartObjects
U>Set chs = Worksheets("sheet1").ChartObjects, то при работе в VC++ имею в распоряжении лишь функцию LPDISPATCH _Worksheet::ChartObjects(const VARIANT& Index), т.е. с параметром. Но если на листе нет диаграм, как их добавлять, если я не могу получить пустую коллекцию?
На самом деле там есть и метод для получения коллекции, но, по-моему, к нему helper function не генерируется.
Попробуй вот так (это С++, не уверен, как в VB это записать):
MSExcel::_Worksheet sheet(...);
LPDISPATCH chartObjDispatch;
sheet.InvokeHelper(0x424, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&chartObjDispatch, NULL);
MSExcel::ChartObjects chartObjects(chartObjDispatch);
Здравствуйте, Vadim B, Вы писали:
VB>На самом деле там есть и метод для получения коллекции, но, по-моему, к нему helper function не генерируется.
VB>Попробуй вот так (это С++, не уверен, как в VB это записать):
VB>VB>MSExcel::_Worksheet sheet(...);
VB>LPDISPATCH chartObjDispatch;
VB>sheet.InvokeHelper(0x424, DISPATCH_PROPERTYGET, VT_DISPATCH, (void*)&chartObjDispatch, NULL);
VB>MSExcel::ChartObjects chartObjects(chartObjDispatch);
VB>
Большое спасибо, но там можно проще:
_Worksheet oSheet; // импортированные из Excel классы
ChartObjects obCharts;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
obCharts = oSheet.ChartObjects(covOptional);
вот только возникает другая проблема: как засунуть в COleVariant объект, например, Range?
Здравствуйте, Unformica, Вы писали:
U>вот только возникает другая проблема: как засунуть в COleVariant объект, например, Range?
Враппер сгенерировать для клаасса Range/ Нам этого
/////////////////////////////////////////////////////////////////////////////
// Range wrapper class
class Range : public COleDispatchDriver
{
public:
Range()
{
} // Calls COleDispatchDriver default constructor
Range(LPDISPATCH pDispatch) : COleDispatchDriver(pDispatch)
{
}
Range(const Range& dispatchSrc) : COleDispatchDriver(dispatchSrc)
{
}
// Attributes
public:
// Operations
public:
CString GetAddress(const VARIANT& RowAbsolute, const VARIANT& ColumnAbsolute, long ReferenceStyle,
const VARIANT& External, const VARIANT& RelativeTo);
VARIANT ClearContents();
VARIANT Copy(const VARIANT& Destination);
VARIANT Insert(const VARIANT& Shift);
VARIANT Select();
VARIANT GetValue();
void SetValue(const VARIANT& newValue);
VARIANT PasteSpecial(long Paste, long Operation, const VARIANT& SkipBlanks, const VARIANT& Transpose);
};
хватает.
Never underestimate those behind you...