powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / построить график в excel
6 сообщений из 6, страница 1 из 1
построить график в excel
    #33147153
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заношу данные в 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
построить график в excel
    #33150977
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
навскидку примерно так:
PChart->SeriesCollection[1]->Name = "=\"Знач.1\"";
...
Рейтинг: 0 / 0
построить график в excel
    #33151390
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нету там такого ( к сожалению )

это делается вручную через 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
построить график в excel
    #33152352
Я писалa ActiveX control по работе с екселевскими документами вот таким способом, код которого вы демонстрируете. Это было похоже на садомазохизьм, но останавливаться не хотелось. Приемущество в том, что ты пишешь в своей любимой среде в Visaul C++ и получаешь удавольствие от работы.
...
Рейтинг: 0 / 0
построить график в excel
    #33152457
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Васелиса ПрекраснаяЯ писалa ActiveX control по работе с екселевскими документами вот таким способом, код которого вы демонстрируете. Это было похоже на садомазохизьм, но останавливаться не хотелось. Приемущество в том, что ты пишешь в своей любимой среде в Visaul C++ и получаешь удавольствие от работы.
:))
...
Рейтинг: 0 / 0
построить график в excel
    #33153184
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sanek842нету там такого ( к сожалению )
Эксель не экспортирует коллекцию SeriesCollection? Хм... не знал. Можно попробовать под другой версией Экселя. Они в части OLE довольно сильно различаются.

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


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