Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++ & COM]Построить график в Excel 
:(
    Опции темы
Predictor
Дата 16.9.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.4.2008
Где: г.Москва

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



Доброго всем времени суток!
Столкнулся с проблемой и погряз в огромном количестве документации по COM. помогите пожалуйста решить одну задачку.Пусть есть двумерный массив n[k][i]. Нужно что бы обычный Win32 Console Application (VS++2005) построило график в Excel...Заранее спасибо  smile 
PM MAIL Skype   Вверх
Annihilator
Дата 18.9.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


bytegrinder
**


Профиль
Группа: Участник
Сообщений: 493
Регистрация: 21.11.2006
Где: Омск

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



Тебе именно через com надо? Я с excel работал через CreateOleObject


--------------------
Если вы не можете сделать хоpошyю пpогpаммy, сделайте, чтобы она по кpайней меpе выглядела хоpошо
PM ICQ   Вверх
Predictor
Дата 18.9.2008, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.4.2008
Где: г.Москва

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



Нет, не  обязательно COM. Если честно, я себе не очень хорошо представляю, чем COM от OLE отличается.Мне просто нужно, чтобы по записанному в ходе работы программы массиву как-нибудь сам  smile  построился график в Excel smile

PM MAIL Skype   Вверх
Evjeny
Дата 18.9.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Посмотри здесь. А еще лучше воспользуйся поиском.
PM MAIL WWW   Вверх
Predictor
Дата 18.9.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.4.2008
Где: г.Москва

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



Спасибо, но в Гугле я уже был
PM MAIL Skype   Вверх
dizzy1984
Дата 18.9.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я тоже был - нашел много информации
PM MAIL   Вверх
Predictor
Дата 18.9.2008, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.4.2008
Где: г.Москва

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



Поясню: эту вешь нужно сделать быстро, потому что нужна она для отладки большой программы, моделирующией поведения молекул в газе.Поэтому мне сейчас нужен готовый рецепт.Если это долго, так и скажите,что долго и геморройно.Тогда я откажусь от этой затеи и постараюсь придумать что-нибудь дргуое.И не буду тратить ваше время  smile 

P.S. Эту ссылку я и сам много раз находил.Только Винграду я больше доверяю smile
PM MAIL Skype   Вверх
dizzy1984
Дата 19.9.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По сслылке, немного переделанное....
Показывает график двумерных данных.
Код

//office.h
//#define USES_MSO97
#define USES_MSO2000
//#define USES_MSO2002
//#define USES_MSO2003

#ifdef USES_MSO97
#import "C:\Program Files\Microsoft Office\Office\Excel8.OLB" auto_search auto_rename
#endif
#ifdef USES_MSO2000
#import "C:\Program Files\Microsoft Office\Office\Excel9.OLB" auto_search auto_rename
#endif
#ifdef USES_MSO2002
#import "progid:Excel.Sheet.8" auto_search auto_rename rename_search_namespace("Office9") \
       rename("DialogBox","_DialogBox") \
        rename("RGB","_RGB") \
        exclude("IFont","IPicture")
#endif
#ifdef USES_MSO2003
#import "progid:Excel.Sheet.8" auto_search auto_rename rename_search_namespace("Office9") \
       rename("DialogBox","_DialogBox") \
        rename("RGB","_RGB") \
        exclude("IFont","IPicture")
#endif

// mycpp.cpp
// Иницилизация COM объекта
    ::CoInitialize(NULL);    
    try 
    {
        // Соединение с MS Excel
        Excel::_ApplicationPtr pXL;
        pXL.CreateInstance("Excel.Application");
        // Показать приложение VARIANT_TRUE или не показывать VARIANT_FALSE
        pXL->Visible[0] = VARIANT_TRUE;
        // Подключение книги
        Excel::WorkbooksPtr pBooks = pXL->Workbooks;
        // Создание новой книги
        Excel::_WorkbookPtr pBook  = pBooks->Add((long)Excel::xlWorksheet);  
        // Указатель на активную страницу
        Excel::_WorksheetPtr pSheet = pXL->ActiveSheet;
  
        // Изменение имени страницы
        pSheet->Name = "Market Share!";
        // Доступ ко всем ячейкам
        Excel::RangePtr pRange = pSheet->Cells;

        Excel::RangePtr pCell;

        pCell = pRange->Item[1][2]; // A2
        pCell->Value2 = 1.0;
        pCell = pRange->Item[2][2]; // B2
        pCell->Value2 = 2.0;
        pCell = pRange->Item[3][2]; // C2
        pCell->Value2 = 5.0;
        pCell = pRange->Item[4][2]; // D2
        pCell->Value2 = 8.0;
   
             pCell = pRange->Item[1][3]; // A3   
             pCell->Value2 = 5.0; 
             pCell = pRange->Item[2][3]; // B3
             pCell->Value2 = 14.0;
             pCell = pRange->Item[3][3]; // C3
             pCell->Value2 = 7.0;
             pCell = pRange->Item[4][3]; // D3
             pCell->Value2 = 7.0;

        // Создание диаграммы
        pRange  = pSheet->Range["B1:C4"];
        Excel::_ChartPtr  pChart  = pBook->Charts->Add(); 
        pChart->ChartWizard((Excel::Range*) pRange, (long) Excel::xlXYScatter, 6L, (long) Excel::xlColumns, 1L, 0L, 2L, "Market Share", "1", "2");
        pChart->ChartType = Excel::xlXYScatterLinesNoMarkers;
        pBook->Close();
        // Выход из Excel
        pXL->Quit();
    }
    catch (_com_error& er)
    {
        char buf[1024];
        sprintf(buf,"_com_error:\n"
                "Error       : %08lX\n"
                "ErrorMessage: %s\n"
                "Description : %s\n"
                "Source      : %s\n",
                er.Error(),
                (LPCTSTR)_bstr_t(er.ErrorMessage()),
                (LPCTSTR)_bstr_t(er.Description()),
                (LPCTSTR)_bstr_t(er.Source())
               );

        ::CharToOem(buf,buf);
        ::MessageBox(m_hWnd, buf, "COM Error", MB_OK | MB_ICONERROR);
   }
   // Закрытие COM 
   ::CoUninitialize(); 

Тут неясно так уж ли нужен excel для "отладки" и в чем его специфическая роль. По поводу времени - я бы оценил написание подобного кода в 1 день.
PM MAIL   Вверх
Predictor
Дата 19.9.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 13.4.2008
Где: г.Москва

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



Большое спасибоsmile Жалко репутацию поднять не могу.
Программист я без году неделя, и учту язык по  мере необходимости физических расчетов.
Отвечая на вопросы: собственно говоря никакой специфической роли нет. подошел бы редактор который умеет строить графики по-точками.Идея заключалась в том, с помошью этого кусочка (ну например поставив в проге ожидание нажатие каких-нибудь клавиш) сразу посмотреть как ведут себя интересующие нас участки кривой.Мне показалось, что моя идея не самый плохой вариант... smile 



Это сообщение отредактировал(а) Predictor - 19.9.2008, 11:58
PM MAIL Skype   Вверх
dizzy1984
Дата 19.9.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда это из пушки по воробьям. Уж лучше выводить в контекст окна.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




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


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

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