автоматизация работы с Excel
От: Unformica Беларусь  
Дата: 21.04.05 14:26
Оценка:
У меня проблема с добавлением диаграмы на лист Excel, конкретно: не могу получить коллекцию диаграм. То есть, если в ВБ можно сделать так:
Dim chs As ChartObjects
Set chs = Worksheets("sheet1").ChartObjects, то при работе в VC++ имею в распоряжении лишь функцию LPDISPATCH _Worksheet::ChartObjects(const VARIANT& Index), т.е. с параметром. Но если на листе нет диаграм, как их добавлять, если я не могу получить пустую коллекцию?

заранее, спасибо.
Re: автоматизация работы с Excel
От: Vadim B  
Дата: 21.04.05 23:42
Оценка:
Здравствуйте, 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);
Re[2]: автоматизация работы с Excel
От: Unformica Беларусь  
Дата: 22.04.05 08:31
Оценка:
Здравствуйте, 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?
Re[3]: автоматизация работы с Excel
От: squiz  
Дата: 24.04.05 12:11
Оценка:
Здравствуйте, 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...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.