Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / построить график в excel / 6 сообщений из 6, страница 1 из 1
04.07.2005, 07:45
    #33147153
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
построить график в excel
заношу данные в excel с исп. библиотек типов

вот код ( это для Office XP )
Код: plaintext
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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include <ole2.h>
#include <stdio.h>

#pragma warning (disable: 4146   4192   4786   4081 )
#import "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL" 
#import "c:\\Program Files\\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.olb" 
#import "c:\Program Files\Microsoft Office\Office10\MSWORD.olb" rename("ExitWindows","ExitWindowsEx")
#import "c:\Program Files\Microsoft Office\Office10\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \
         rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")


struct StartOle {
    StartOle() { CoInitialize(NULL); }
    ~StartOle() { CoUninitialize(); }
} _inst_StartOle;


int main(int argc, char* argv[])
{

    using namespace Excel;

    try {

		CLSID clsid;
		CLSIDFromProgID(L"Excel.Application", &clsid); 
		_ApplicationPtr pApp;
		pApp.CreateInstance (clsid,NULL);
		pApp ->PutVisible ( 0 ,VARIANT_TRUE);
		_WorkbookPtr   pBook  = pApp->GetWorkbooks()->Add();
		_WorksheetPtr  pSheet = pBook->Worksheets->GetItem(_variant_t((long) 1 )); 

		// шапка таблицы
		pSheet->Range["A1"]->Value2 = "Дни";
		pSheet->Range["B1"]->Value2 = "Знач.1";
		pSheet->Range["C1"]->Value2 = "Знач.2";

		// значения
		pSheet->Range["A2"]->Value2 = "ПН";
		pSheet->Range["B2"]->Value2 =  14 . 0 ;
		pSheet->Range["C2"]->Value2 =  7 . 456 ;

		pSheet->Range["A3"]->Value2 = "ВТ";
		pSheet->Range["B3"]->Value2 =  13 . 0 ;
		pSheet->Range["C3"]->Value2 =  4 . 56 ;
		
    
		_ChartPtr  pChart  = pBook->Charts->Add();
		pChart->ChartWizard((Range*) pSheet->Range["A2:C3"], (long) xl3DBar, 4L, (long)  xlColumns, 1L, 0L, 1L, "Title");
		pChart->ChartType = xl3DColumnClustered;

		//pApp->ActiveChart->SeriesCollection(_variant_t((long) 1 ))-> ?

		//pSheet->SaveAs("C:\\1.xls");
		//pBook->Close();
		//pApp->Quit();

    } catch(...) {}
	return  0 ;
}


График строится, но как мне проименовать легенду, подписи проставить , вообщем довести до ума, никак не могу нигде найти. В самом excel вручную делал макросы строя график, но что то там несрастается. Так например как получить аналог данных строк
Код: plaintext
1.
2.
3.
ActiveChart.SeriesCollection(1).Name = "=""Знач.1"""
ActiveChart.SeriesCollection(2).Name = "=""Знач.2"""
ActiveChart.Location Where:=xlLocationAsObject, Name:="Лист1"
?
Вообще , нужно получить такой вид
...
Рейтинг: 0 / 0
05.07.2005, 18:25
    #33150977
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
построить график в excel
навскидку примерно так:
PChart->SeriesCollection[1]->Name = "=\"Знач.1\"";
...
Рейтинг: 0 / 0
06.07.2005, 07:59
    #33151390
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
построить график в excel
нету там такого ( к сожалению )

это делается вручную через Invoke предварительно получив указатель на IDispatch
вот код
Код: plaintext
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.
...
{	
	IDispatchPtr pDisp = pApp->ActiveChart->SeriesCollection(_variant_t((long) 1 ));
	HRESULT hr;
	DISPID dispid;
	OLECHAR* szMember = OLESTR("Name");

	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(OLESTR("=\"Знач. 1 \""));
		
		DISPID dispidPut = DISPID_PROPERTYPUT;	
		DISPPARAMS dp;
		dp.cArgs =  1 ;
		dp.rgvarg = varg;
		dp.rgdispidNamedArgs = &dispidPut; 
		dp.cNamedArgs =  1 ;

		hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT,DISPATCH_PROPERTYPUT,&dp, NULL, NULL, NULL);
		if (FAILED(hr)) prn_invoke_err(hr);
	}
}
...

Как альтернатива, я так поним., можно еще поступить подругому - через вызовы классов COleDispatchDriver ( что из MFC ), кто то тут даже пытается объяснить как это сделать ... :)

P.S.
Я так понимаю это универсальные способы работы с COM
Но честно говоря по сравнению с Visual Basic что то тяжко все это реализовано ...
А кто нибудь программирует так, или я не на тот путь встал? :)
...
Рейтинг: 0 / 0
06.07.2005, 14:44
    #33152352
построить график в excel
Я писалa ActiveX control по работе с екселевскими документами вот таким способом, код которого вы демонстрируете. Это было похоже на садомазохизьм, но останавливаться не хотелось. Приемущество в том, что ты пишешь в своей любимой среде в Visaul C++ и получаешь удавольствие от работы.
...
Рейтинг: 0 / 0
06.07.2005, 15:24
    #33152457
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
построить график в excel
Васелиса ПрекраснаяЯ писалa ActiveX control по работе с екселевскими документами вот таким способом, код которого вы демонстрируете. Это было похоже на садомазохизьм, но останавливаться не хотелось. Приемущество в том, что ты пишешь в своей любимой среде в Visaul C++ и получаешь удавольствие от работы.
:))
...
Рейтинг: 0 / 0
06.07.2005, 19:32
    #33153184
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
построить график в excel
sanek842нету там такого ( к сожалению )
Эксель не экспортирует коллекцию SeriesCollection? Хм... не знал. Можно попробовать под другой версией Экселя. Они в части OLE довольно сильно различаются.

Но лично я всеже предпочитаю делать XLS-шаблоны и класть в них макросы которые запускаются после наполнения шаблона неформатироваными (или частично форматированными) данными и делают уже окончательную раскраску циферок :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / построить график в excel / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]