Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53

Построение графика в excel

17.02.2013, 22:44. Показов 9742. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
При построении графика в excel мне необходимо чтобы в графике стояли просто точки не соедененные между собой, так же чтобы на графике присутствовала линия тренда. Пример необходимого графика прикреплен скрином к сообщению.
Заранее благодарю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//--------------------построение графика начало
Cell=Sheet.OlePropertyGet("Range","A54:B63");
Cell.OleProcedure("Select");
Books=App.OlePropertyGet("Charts");
Books.OleProcedure("Add");
 
Book.OlePropertyGet("ActiveChart").OleProcedure("Location",2,"Лист1");
 
chartObjs = Sheet.OleFunction("ChartObjects");
chartObj = chartObjs.OleFunction("Item", 1);
chartObj.OlePropertySet("Top", 800);
chartObj.OlePropertySet("Left", 105);
chartObj.OlePropertySet("Height",200);
chartObj.OlePropertySet("Width",320);
Book.OlePropertyGet("ActiveChart").OlePropertySet("ChartType",63);
Book.OlePropertyGet("ActiveChart").OlePropertySet("HasLegend",false);
//--------------------построение графика конец
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2013, 22:44
Ответы с готовыми решениями:

Создание файла и построение графика в Excel
Необходимо с помощью Visual C++ по двум массивам построить в Excel график. Каким образом это можно сделать? Заранее спасибо.

Построение графика в Excel
Возможно ли имея формулу построить график в Exel через делфи О_О если да, то подскажите как это проще всего реализоваь, если кинете какой...

Построение графика в Excel
Надо в excel вывести данные и по ним построить график. Данные построила с графиком беда. Все время вылазят какие-то ошибки. Уже и макрос...

25
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,460
18.02.2013, 11:20
и что? проблема в части где будет указаны данные и линия тренда?
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
18.02.2013, 14:26  [ТС]
я не знаю как сделать чтобы график был не линией, а точками
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
18.02.2013, 15:44
Цитата Сообщение от maxkod Посмотреть сообщение
не знаю как сделать чтобы график был не линией, а точками
Надо задавать ChartType не 63 (xlLineStacked), а -4169, то есть, xlXYScatter, точечная диаграмма.

А как добавить линию тренда я тебе уже показывал в предыдущей теме.
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
18.02.2013, 17:18  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Надо задавать ChartType не 63 (xlLineStacked), а -4169, то есть, xlXYScatter, точечная диаграмма.

А как добавить линию тренда я тебе уже показывал в предыдущей теме.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//--------------------построение графика начало
Cell=Sheet.OlePropertyGet("Range","A54:B57");
Cell.OleProcedure("Select");
Books=App.OlePropertyGet("Charts");
Books.OleProcedure("Add");
 
Book.OlePropertyGet("ActiveChart").OleProcedure("Location",2,"Лист1");
 
chartObjs = Sheet.OleFunction("ChartObjects");
chartObj = chartObjs.OleFunction("Item", 1); 
chartObj.OlePropertySet("Top", 800);
chartObj.OlePropertySet("Left", 105);
chartObj.OlePropertySet("Height",200);
chartObj.OlePropertySet("Width",320);
Book.OlePropertyGet("ActiveChart").OlePropertySet("ChartType", -4169);
Book.OlePropertyGet("ActiveChart").OlePropertySet("HasLegend", false);
//--------------------построение графика конец
При использовании -4169 он мне просто ставит одну точку, причем не в соответствии с заданными числами(скрин прикреплен), в чем моя ошибка?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
19.02.2013, 01:13
Цитата Сообщение от maxkod Посмотреть сообщение
в чем моя ошибка?
Вот это прекрасно показывает все точки:
C++
1
2
3
4
5
6
7
8
9
10
11
    Variant vVarBooks = XL.OlePropertyGet("ActiveWorkbook");
    Variant vVarSheets = vVarBooks.OlePropertyGet("ActiveSheet");
    vVarSheets.OlePropertyGet(L"Range", WideString("A13:B17")).OleProcedure("Select");
 
    Variant Charts = XL.OlePropertyGet("Charts");
    Charts.OleProcedure("Add");
    Variant Chart = Charts.OlePropertyGet(L"Item", 1);
    Chart.OlePropertySet(L"ChartType", -4169);
    Chart.OlePropertySet(L"HasLegend", false);
    Chart.OleProcedure(L"SetSourceData",
        vVarSheets.OlePropertyGet(L"Range", WideString("A13:B17")), 2); // xlColumns
1
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
19.02.2013, 10:59  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
Variant vVarBooks = App.OlePropertyGet("ActiveWorkbook");
    Variant vVarSheets = vVarBooks.OlePropertyGet("ActiveSheet");
    vVarSheets.OlePropertyGet(L"Range", WideString("A54:B57")).OleProcedure("Select");
 
    Variant Charts = App.OlePropertyGet("Charts");
    Charts.OleProcedure("Add");
    Variant Chart = Charts.OlePropertyGet(L"Item", 1);
    Chart.OlePropertySet(L"ChartType", -4169);
    Chart.OlePropertySet(L"HasLegend", false);
    Chart.OleProcedure(L"SetSourceData",
        vVarSheets.OlePropertyGet(L"Range", WideString("A54:B57")), 2); // xlColumns
та же ситуация...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
19.02.2013, 13:59
Это карма... Не везёт - значит, не везёт по крупному... "Крокодил не ловится, не растёт кокос" (С)

Еще раз... Код работает, смотри:
Данные:


График:


Что я не так делаю?
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
19.02.2013, 14:59  [ТС]
Спасибо, код работает, ошибка у меня была в том, что builder выводил дробные числа с разделителем запятая, а в excel стоял разделитель как точка, по этому и не происходило корректное построение.
Цитата Сообщение от UI Посмотреть сообщение
C++
1
2
       Variant chart = Sheet.OlePropertyGet("ChartObjects", 1).OlePropertyGet("Chart");
       chart.OlePropertyGet("SeriesCollection", 1).OlePropertyGet("Trendlines").OleProcedure("Add", xlLogarithmic);
К чарту прекрасно добавляется логарифмическая линия тренда.
вот при построении линии трнеда написанным вами коде у меня выдается 2 ошибки:
E2451 Undefined symbol 'xlLogarithmic'
E2285 Could not find a match for 'Variant::OleProcedure(const char *,undefined)'
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
19.02.2013, 16:49
У меня подключен заголовочный файл для работы с Excel-ем, но если что - можно и описать ручками:
C++
1
const int xlLogarithmic = -4133;
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
19.02.2013, 20:31  [ТС]
а как подключать модуль excel 2007? для 97 #include <vcl\excel_97.h>, а вот для 2007 я не нашел
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
20.02.2013, 01:39
У меня Офис XP, так что Excel_XP.h мне вполне хватает... Эти переливающиеся всеми цветами радуги елочные игрушки (я про новые версии офиса) мне не нужны...
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
21.02.2013, 11:36  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
У меня Офис XP, так что Excel_XP.h мне вполне хватает... Эти переливающиеся всеми цветами радуги елочные игрушки (я про новые версии офиса) мне не нужны...
а возможно как то или где то посмотреть как подключить модель для 2007? в интернете нигде не нашел

Добавлено через 11 часов 32 минуты
Цитата Сообщение от UI Посмотреть сообщение
У меня подключен заголовочный файл для работы с Excel-ем, но если что - можно и описать ручками:
C++
1
const int xlLogarithmic = -4133;
при использовании кода
C++
1
2
3
 const int xlLogarithmic = -4133;
  Variant chart = Sheet.OlePropertyGet("ChartObjects", 1).OlePropertyGet("Chart");
       chart.OlePropertyGet("SeriesCollection", 1).OlePropertyGet("Trendlines").OleProcedure("Add", xlLogarithmic);
выдается ошибка "First chance exception at $7506B9BC. Exception class EOleSysError with message 'Член группы не найден'. Process test.exe (3720)"
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
21.02.2013, 12:27
maxkod, чарт добавляется отдельным листом, или на том же листе, что и данные? Если отдельно - то можно сразу после его создания сделать так:
C++
1
2
       Variant chart = XL.OlePropertyGet("ActiveChart").OleFunction("SeriesCollection", 1);
       chart.OlePropertyGet("Trendlines").OleProcedure("Add", xlLogarithmic);
, это прекрасно добавляет линию тренда:
Миниатюры
Построение графика в excel  
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
22.02.2013, 12:08  [ТС]
чарт создается отдельным листом, затем перемещается на лист с исходными данными:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sheet.OlePropertyGet("Range", "A54:B57").OleProcedure("Select");
chartObjs = App.OlePropertyGet("Charts");
chartObjs.OleProcedure("Add");
 
chartObj = chartObjs.OlePropertyGet("Item", 1);
chartObj.OlePropertySet("ChartType", -4169);
chartObj.OlePropertySet("HasLegend", false);
chartObj.OleProcedure("SetSourceData",
        Sheet.OlePropertyGet("Range", WideString("A54:B57")), 2); // xlColumns
 
const int xlLogarithmic = -4133;
Variant chart = App.OlePropertyGet("ActiveChart").OleFunction("SeriesCollection", 1);
       chart.OlePropertyGet("Trendlines").OleProcedure("Add", xlLogarithmic);
 
 
chartObj.OleProcedure("Location",2,"Лист1");
 
chartObj = Sheet.OleFunction("ChartObjects").OleFunction("Item", 1);
chartObj.OlePropertySet("Top", 800);
chartObj.OlePropertySet("Left", 105);
chartObj.OlePropertySet("Height",200);
chartObj.OlePropertySet("Width",320);
все равно выдается ошибка при обработке 13 строки - First chance exception at $749CB9BC. Exception class EOleSysError with message 'Член группы не найден'. Process test.exe (4404)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
22.02.2013, 13:02
Без понятия, что у тебя происходит, все члены группы присутствуют, проверил в MSDN, ничего не изменилось в указанной строке. Еще раз весь процесс от начала (запуск XL) до конца:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    Variant App = CreateOleObject("Excel.Application"); // Запустили Excel
    App.OlePropertySet("Visible", true); // Показали его
    App.OlePropertyGet("Workbooks").OleFunction("Open", WideString(Path)); // Открыли файл
 
    Variant Book = App.OlePropertyGet("ActiveWorkbook");
    Variant Sheet = Book.OlePropertyGet("ActiveSheet");
 
    Sheet.OlePropertyGet("Range", WideString("A54:B57")).OleProcedure("Select"); // Выбрали область
    Variant chartObjs = App.OlePropertyGet("Charts");
    chartObjs.OleProcedure("Add"); // Добавили новый чарт отдельным листом
 
    Variant chartObj = chartObjs.OlePropertyGet("Item", 1); // Работаем с первым чартом
    chartObj.OlePropertySet("ChartType", -4169);
    chartObj.OlePropertySet("HasLegend", false);
    // Настроили входные данные
    chartObj.OleProcedure("SetSourceData",
        Sheet.OlePropertyGet("Range", WideString("A54:B57")), 2); // xlColumns
 
    const int xlLogarithmic = -4133;
    Variant chart = App.OlePropertyGet("ActiveChart").OleFunction("SeriesCollection", 1);
    // Добавили линию тренда
    chart.OlePropertyGet("Trendlines").OleProcedure("Add", xlLogarithmic);
 
    // Перенесли чарт на нужный лист:
    chartObj.OleProcedure("Location", 2, Sheet.OlePropertyGet("Name"));
 
    // И настроили его свойства
    chartObj = Sheet.OleFunction("ChartObjects").OleFunction("Item", 1);
    chartObj.OlePropertySet("Top", 800);
    chartObj.OlePropertySet("Left", 105);
    chartObj.OlePropertySet("Height",200);
    chartObj.OlePropertySet("Width",320);
Как видишь, работает прекрасно:


А теперь - вопрос на засыпку: ты вручную-то пробовал TrendLine создавать? Запиши макрос, создай эту линию, и посмотри, что тебе VBA показывает, как именно она создаётся. А то может она и не создастся вообще...
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
22.02.2013, 13:50  [ТС]
запись макроса VBA создания линии тренда по готовому графику:
Visual Basic
1
2
3
4
5
6
    ActiveChart.ChartArea.Select
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).Trendlines.Add
    ActiveChart.SeriesCollection(1).Trendlines(1).Select
    Selection.Type = xlLogarithmic
    Selection.Type = xlLinear
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
22.02.2013, 14:36
Стоп... Что я вижу в MSDN?
Creates a new trendline. Returns a Trendline object.
Так это что, теперь функция что-ли, а не процедура? Попробуй заменить OleProcedure на OleFunction...
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
26.02.2013, 00:26  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Попробуй заменить OleProcedure на OleFunction...
C++
1
2
3
4
    const int xlLogarithmic = -4133;
    Variant chart = App.OlePropertyGet("ActiveChart").OleFunction("SeriesCollection", 1);
    // Добавили линию тренда
    chart.OlePropertyGet("Trendlines").OleFunction("Add", xlLogarithmic);
все равно та же ошибка - First chance exception at $760DB9BC. Exception class EOleSysError with message 'Член группы не найден'. Process test.exe (3952)

Добавлено через 15 часов 45 минут
как я понимаю скорее всего моя проблема связанна с тем, что у Вас подключен excel (Excel_XP.h), а у меня нет, ибо код абсолютно одинаковый.
как я могу подключить excel 2007/2010, или хотябы где мне посмотреть как его подключить?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
26.02.2013, 01:33
Да так же и подключить, тот же Excel_XP.h, чего ты привязался к версии? Ну, не будет у тебя каких-то специфических констант, которые были добавлены в 2003+, так их у тебя и сейчас нет, а основное (уж то, что для решения твоей задачи) там точно есть...

Но боюсь, тебе это не поможет... Ибо M$ - в своём репертуаре: куда хочет туда и пихает в следующих версиях методы, куда ей понадобилось - туда и переносит со старых мест... "Обратная совместимость? Не, не слышали..."
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2013, 01:33
Помогаю со студенческими работами здесь

Построение графика в Excel
Здравствуйте, как построить график функции в экселе, если не дан промежуток? сама функция: x^3-4x/3x^2-4

Построение графика в Excel
Подскажите как мне сделать так что бы строился график, у меня все данные в отчет заносятся через xReport, можно график сделать что бы...

Построение графика в Excel
Как построить график, если есть всего два значения, например i=2.028 и w=134рад/с.

Построение графика в Excel
Здавствуйте! Прошу помощи!!! Проблема при построении графика в Excel: по двум рядам данных строится не один график, а два независимых друг...

Построение графика функции в Excel
Здравствуйте! Помогите пожалуйста. Кто может построить график функции в Excel: y = {x}^{2} + 7cosx


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru