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

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

17.02.2013, 22:44. Показов 9667. Ответов 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
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
18.02.2013, 11:20
и что? проблема в части где будет указаны данные и линия тренда?
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
18.02.2013, 14:26  [ТС]
я не знаю как сделать чтобы график был не линией, а точками
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
33192 / 21488 / 8233
Регистрация: 22.10.2011
Сообщений: 36,873
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru