Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отключить автоматическое создание SeriesCollectio 
:(
    Опции темы
Goran71
Дата 17.2.2011, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



Работаю с Excel добавляю книгу, ищу первый лист, заполняю ячейки (код ниже)
Код

::CoInitialize(NULL);

Excel::_ApplicationPtr app("Excel.Application");

app->Visible[0] = false;

Excel::_WorkbookPtr book = app->Workbooks->Add();
Excel::_WorksheetPtr sheet = book->Worksheets->Item[1];

RangePtr pRange = sheet->Cells;
RangePtr pCell;

pCell = pRange->Item[1][1]; // A1
pCell->Value2 = "1";
pCell = pRange->Item[1][2]; // B1
pCell->Value2 = "1";
pCell = pRange->Item[1][3]; // C1
pCell->Value2 = "10";
pCell = pRange->Item[2][1]; // A2
pCell->Value2 = "3";
pCell = pRange->Item[2][2]; // B2
pCell->Value2 = "1";
pCell = pRange->Item[2][3]; // C2
pCell->Value2 = "20";
........
и т.д.


Добавляю диаграмму, определяю с помощью указателей интервалы и передаю их в SetSourceData, а так же с помощью
(long)Excel::xlColumns говорю, что делить по колонкам

Код

Excel::RangePtr pBeginRange = pRange->Item[1][1];
Excel::RangePtr pEndRange = pRange->Item[5][9];
Excel::RangePtr pTotalRange = sheet->Range[(Excel::Range *)pBeginRange][(Excel::Range *)pEndRange];
_ChartPtr  pChart2  = book->Charts->Add();
pChart2->ChartType = xlBubble3DEffect; // xlBubble - пузырьковая
pChart2->Name = "Пузырьковая диаграмма";
pChart2->SetSourceData((Excel::Range *)pTotalRange, (long)Excel::xlColumns);


В итоге получается что создаётся 4 ряда и все они берут координату X из A1:A4, а мне нужно чтобы первый ряд брал координату X из A1:A4, второй из D1:D4, третий из G1:G4 и всего было 3 ряда (9 колонок: 3 ряда - 3 столбца - X Y Size)


как мне сделать так чтобы брались координаты из нужным мне столбцов, а не из первого. Может быть в Add() какие-то параметры задать? или есть какие-то методы и свойства у pChart2. я пробовал через Dispatch и Invoke
Код

pDisp = pChart2->SeriesCollection(_variant_t((long)2));
    dispid;
    szMember = OLESTR("XValues");

    hr = pDisp->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid);
    if(SUCCEEDED(hr))
    {
        VARIANT varg[1];
        varg[0].vt = VT_BSTR;
        varg[0].bstrVal = _bstr_t(sheet->Name) + _bstr_t(OLESTR("!$D$1:$D$4"));
        DISPID dispidPut = DISPID_PROPERTYPUT;    
        DISPPARAMS dp;
        dp.cArgs = 1;
        dp.rgvarg = varg;
        dp.rgdispidNamedArgs = &dispidPut; 
        dp.cNamedArgs = 1;

        pDisp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_PROPERTYPUT,&dp, NULL, NULL, NULL);
    }

и т.д. для остальных
но тогда остаётся лишний ряд, созданные автоматически.... Вариант их удалять опять же через Dispatch и Invoke не очень красивый 
Можеть быть как-то можно отключить автоматическое создание SeriesCollection и в ручную их создавать? 
Если какие-то примеры кода, то только на C++,  не на Delphi, VBA и Pascal.

Спасибо




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0366 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.