Вставка обьекта Image на лист Excel средствами VB.NET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Вставка обьекта Image на лист Excel средствами VB.NET

Сообщение AGGRESSOR » 02.11.2005 (Ср) 17:01

Камрады помогите!

вставляю на лист Excel контрол Image:
Код: Выделить всё
Dim ExcelApp As New Excel.Application
Dim ExcelBook As Excel.Workbook = ExcelApp.Workbooks.Add
Dim ExcelWsheet As Excel.Worksheet = CType(ExcelBook.Worksheets(1), Excel.Worksheet)

ExcelBook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
DisplayAsIcon:=False, Left:=280, Top:=650, Width:=120, Height:=60).Select()

но когда дело доходит до:
Код: Выделить всё
ExcelBook.ActiveSheet.OLEObjects.Item(1).object.Picture=

не знаю что делать :(

в Excel все решается так
Код: Выделить всё
ActiveSheet.OLEObjects.Item(1).object.Picture=stdole.StdFunctions.LoadPicture("C:\pic.jpg")

фишка в том что в VB.NET в Namespace stdole нету StdFunctions

конструкция типа
Код: Выделить всё
ExcelBook.ActiveSheet.OLEObjects.Item(1).object.Picture=Image.FromFile("C:\pic.jpg")

привела к несовпадению типов :cry:

Помогите! Обьясните, как загрузить в обьект картинку (с харда, из памяти, из базы - пофигу откуда)?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.11.2005 (Пн) 15:39

Поставь в VB ссылку на OLE Automation (stdole2.tlb).
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 08.11.2005 (Вт) 8:36

Жму Add Reference
... на вкладке COM нахожу: Component name - OLE Automation; Type - COM; Source - C:\windows\system32\stdole2.tlb
... выбираю - добавляю
... в References появляется stdole
... смотрю Properties
... Path - C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll
... открываю stdole в Object Browser
... класса StdFunctions НЕТУ !!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2005 (Вт) 13:59

И правда нету...

А, ну да...
Помнится, приходилось получать HBitmap картинки и вызывать OleCreatePictureIndirect...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 08.11.2005 (Вт) 16:02

GSerg помоги, научи, дай пример кода ... пжлста :?

В книжках про такое не пишут ... подозреваю что подобные знания передаются "из уст в уста" ...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2005 (Вт) 16:15

Подобные знания есть везде, особенно тут.

А, кстати, тебе не подойдёт ExcelBook.ActiveSheet.Pictures.Insert "c:\pic.jpg" ?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 08.11.2005 (Вт) 16:27

GSerg ExcelBook.ActiveSheet.Pictures.Insert "c:\pic.jpg" - не подойдет
... т.к. вставляется во всю ширину - высоту и пользователь легко может изменить\удалить картинку ... если же картинка будет в контроле, то сначала надо включить "режим конструктора", а это далеко не каждый юзер умеет делать :wink:

... а без API ни как не обойтись ? :(

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2005 (Вт) 16:41

Защита листа не спасёт отца русской демократии?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 08.11.2005 (Вт) 16:48

на листе все остальное надо оставить открытым для редактирования ...
да и ресайзать картинки придется ... интересно будет ли размер зависеть от разрешения ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.11.2005 (Вт) 18:18

Защита листа "Только от пользователя (не от кода)" + "Защищать только внедрённые объекты" не спасёт отца русской демократии?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

AGGRESSOR
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 21
Зарегистрирован: 13.10.2005 (Чт) 10:09
Откуда: Мурманск

Сообщение AGGRESSOR » 09.11.2005 (Ср) 8:29

Вообще это выход ... но хотелось бы контрол (и торг здесь не уместен!) :)

Другого варианта кроме как самому написать функцию LoadPicture нету?
Например - может можно преобразовать типы в конструкции:
Код: Выделить всё
ExcelBook.ActiveSheet.OLEObjects.Item(1).object.Picture=Image.FromFile("C:\pic.jpg")

так, чтобы не было несовпадения?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.11.2005 (Ср) 12:36

Вредный чел.

Погляди тут. Там в начале эта функция. Остальное игнорируй, а то вдруг подумаешь, что оно надо для конвертирования...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 40

    TopList