ADDPicture в Excel
Посмотрел справку в VB Excel'я .
Set myDocument = Worksheets(1)
myDocument.Shapes.AddPicture _
"c:\microsoft office\clipart\music.bmp", _
True, True, 100, 100, 70, 70
Попробовал повторить :
XL=CreateOleObject("Excel.Application");
XL.OlePropertySet("Visible",true);
my_workbook = XL.OlePropertyGet("ActiveWorkbook");
my_worksheet = my_workbook.OlePropertyGet("ActiveSheet");
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\Documents and Settings\picture.bmp",0, 0, 0, 0, 241,470 );
Пчемуто ошибка на OleProcedure
Посмотрел справку в VB Excel'я .
Set myDocument = Worksheets(1)
myDocument.Shapes.AddPicture _
"c:\microsoft office\clipart\music.bmp", _
True, True, 100, 100, 70, 70
Попробовал повторить :
XL=CreateOleObject("Excel.Application");
XL.OlePropertySet("Visible",true);
my_workbook = XL.OlePropertyGet("ActiveWorkbook");
my_worksheet = my_workbook.OlePropertyGet("ActiveSheet");
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\Documents and Settings\picture.bmp",0, 0, 0, 0, 241,470 );
Пчемуто ошибка на OleProcedure[/QUOTE]
Одна из возможных проблем - надо так
Код:
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\\Documents and Settings\\picture.bmp",0, 0, 0, 0, 241,470 );
SYSVARI.H открывается на OleProcedure.
SYSVARI.H открывается на OleProcedure.[/QUOTE]
Код:
хедеры должны идти так:
...
#include <vcl.h>
#include <utilcls.h> // 1
#include <sysvari.h> // 2
#include <ComObj.hpp> // 3
#pragma hdrstop
...
#pragma package(smart_init)
#pragma resource "*.dfm"
...
...
#include <vcl.h>
#include <utilcls.h> // 1
#include <sysvari.h> // 2
#include <ComObj.hpp> // 3
#pragma hdrstop
...
#pragma package(smart_init)
#pragma resource "*.dfm"
...
на всяк случай вот полный код:
Код:
Variant XL,v0,my_workbook,my_worksheet;
XL=CreateOleObject("Excel.Application");
XL.OlePropertySet("Visible",true);
v0=XL.OlePropertyGet("Workbooks");
v0.OleProcedure("Add");
my_workbook = XL.OlePropertyGet("ActiveWorkbook");
my_worksheet = my_workbook.OlePropertyGet("ActiveSheet");
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddTextEffect",15, "GutenTag","Arial",36, 0, 0, 0, 0);
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\\Rigel1.bmp",0, 0, 0, 0, 247, 470 );
XL.OleProcedure("Quit");
XL=CreateOleObject("Excel.Application");
XL.OlePropertySet("Visible",true);
v0=XL.OlePropertyGet("Workbooks");
v0.OleProcedure("Add");
my_workbook = XL.OlePropertyGet("ActiveWorkbook");
my_worksheet = my_workbook.OlePropertyGet("ActiveSheet");
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddTextEffect",15, "GutenTag","Arial",36, 0, 0, 0, 0);
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\\Rigel1.bmp",0, 0, 0, 0, 247, 470 );
XL.OleProcedure("Quit");
объект WordArt создаётся а E:\\Rigel1.bmp - нет
Фрагмент кода:
Код:
Variant Sh;
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());
Код:
Variant Sh;
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());
работает
Я этим методом раньше и пытался только макрос из VB не смог под Си переделать
но если подумать AddPicture лучше т.к. там можно Top и Left устанавливать
А с установкой позиции рисунка я боролся вот так, если приводить кусочек кода целиком:
Код:
if (FileExists(LogoFileName))
{
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",LogoFileName.c_str());
try
{
Sh.OlePropertyGet("Pictures",1).OlePropertyGet("ShapeRange").OleProcedure("IncrementTop",13.5);
}
catch(...){;}
}
{
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",LogoFileName.c_str());
try
{
Sh.OlePropertyGet("Pictures",1).OlePropertyGet("ShapeRange").OleProcedure("IncrementTop",13.5);
}
catch(...){;}
}
Код:
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\\Rigel1.bmp",0, 0, 0, 0, 247, 470 );
[\code]
я ещё в Excele справку по макросам смотрел всё сходилось.
только нужно указывать размер ширины и высоты рисунка в пикселях . чтобы рисунок не выглядел скукоженно
Хорошо-бы в результате длинного обсуждения подвести какой-либо итог. Вроде это даже типа этикета на форумах. Поэтому приведи пожайлуста полный, работающий код.
P.S. Мне, то он не понадобится потому, что как сказал один человек: - "я супер-пупер программист:)" и поэтому я сам его напишу за 5 минут, а вот другим людям очень даже пригодится.