Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ADDPicture в Excel

13K
07 июня 2006 года
koss
20 / / 13.05.2006
Понадобилось вставить в Excell рисунок .
Посмотрел справку в 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
1
07 июня 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=koss]Понадобилось вставить в Excell рисунок .
Посмотрел справку в 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 );
13K
07 июня 2006 года
koss
20 / / 13.05.2006
Я про // вчера ещё додумался но всё равно ошибку выдаёт и
SYSVARI.H открывается на OleProcedure.
246
07 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=koss]Я про // вчера ещё додумался но всё равно ошибку выдаёт и
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"
...
13K
07 июня 2006 года
koss
20 / / 13.05.2006
Хедры правильные
на всяк случай вот полный код:
Код:
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");


объект WordArt создаётся а E:\\Rigel1.bmp - нет
385
07 июня 2006 года
SomewherSomehow
477 / / 25.07.2004
Я делал следующим образом, все работало.
Фрагмент кода:
 
Код:
Variant Sh;
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());
13K
07 июня 2006 года
koss
20 / / 13.05.2006
 
Код:
Variant Sh;
Sh=App.OlePropertyGet("WorkSheets",1);
Sh.OlePropertyGet("Pictures").OleProcedure("Insert",FileName.c_str());

работает
Я этим методом раньше и пытался только макрос из VB не смог под Си переделать

но если подумать AddPicture лучше т.к. там можно Top и Left устанавливать
385
07 июня 2006 года
SomewherSomehow
477 / / 25.07.2004
Интересно что лучше "работающее но хуже" или "неработающее но лучше" =)) философский вопрос. =)
А с установкой позиции рисунка я боролся вот так, если приводить кусочек кода целиком:
 
Код:
if (FileExists(LogoFileName))
      {
        Sh.OlePropertyGet("Pictures").OleProcedure("Insert",LogoFileName.c_str());
        try
        {
          Sh.OlePropertyGet("Pictures",1).OlePropertyGet("ShapeRange").OleProcedure("IncrementTop",13.5);
        }
        catch(...){;}
      }
13K
07 июня 2006 года
koss
20 / / 13.05.2006
лучше "работающее но лучше"
 
Код:
my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","E:\\Rigel1.bmp",0, 0, 0, 0, 247, 470 );
br /> my_worksheet.OlePropertyGet("Shapes").OleProcedure("AddPicture","F:\\Rigel1.bmp",0, 0, 0, 0, 247, 470 );
[\code]
я ещё в Excele справку по макросам смотрел всё сходилось.
13K
07 июня 2006 года
koss
20 / / 13.05.2006
только нужно указывать размер ширины и высоты рисунка в пикселях . чтобы рисунок не выглядел скукоженно
246
08 июня 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=koss]только нужно указывать размер ширины и высоты рисунка в пикселях . чтобы рисунок не выглядел скукоженно[/QUOTE]
Хорошо-бы в результате длинного обсуждения подвести какой-либо итог. Вроде это даже типа этикета на форумах. Поэтому приведи пожайлуста полный, работающий код.

P.S. Мне, то он не понадобится потому, что как сказал один человек: - "я супер-пупер программист:)" и поэтому я сам его напишу за 5 минут, а вот другим людям очень даже пригодится.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог