powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL Вставка картинки
6 сообщений из 6, страница 1 из 1
EXCEL Вставка картинки
    #35650860
Mbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Dim fn As String
    Dim h As Double
    Dim v As Double

    fn =  "C:\1.png"
    h = ActiveCell.Left
    v = ActiveCell.Top
    
    ActiveWorkbook.ActiveSheet.Shapes.AddPicture fn, False, True, h, v,  30 ,  30 


Картинка вставляется конечно.
Но вот мне нужно чтобы она вставлялась со своими реальными размерами, а не теми которые нужно указать в AddPicture (картинки разные, вытянутые, приплючнутые и т.д. и вставлять их под одну гребенку неправильно).

Как вытащить реальные размеры картинки и назначить их ей?
...
Рейтинг: 0 / 0
EXCEL Вставка картинки
    #35651540
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub w()

Const P =  26 . 458 
Dim fn As String
Dim x As IPictureDisp
fn = "C:\1.png"
Set x = LoadPicture(fn)
a = CInt(x.Width / P)
b = CInt(x.Height / P)
ActiveWorkbook.ActiveSheet.Shapes.AddPicture fn, False, True, h, v, a, b

End Sub
...
Рейтинг: 0 / 0
EXCEL Вставка картинки
    #35651580
Mbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишет ошибку Invalid Picture.

И мне кажется (как из справки поняла), LoadPicture используется в основном на формах (картинку на кнопку или другой контрол подгрузить).
...
Рейтинг: 0 / 0
EXCEL Вставка картинки
    #35651628
Mbus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оказывается с форматом *.png не работает

жаль..у меня-то все файлы такие.
...
Рейтинг: 0 / 0
EXCEL Вставка картинки
    #35651765
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mbus,
да, LoadPicture() PNG не понимает (и некоторые JPEG, и TIFF). Но есть GDI+:
Код: 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.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
Option Explicit

'============================== GDI+ declarations ==============================
Private Type GdiplusStartupInput
   GdiplusVersion As Long
   DebugEventCallback As Long
   SuppressBackgroundThread As Long
   SuppressExternalCodecs As Long
End Type

' GDI+ Status
Private Enum GpStatus
   OK =  0 
   GenericError =  1 
   InvalidParameter =  2 
   OutOfMemory =  3 
   ObjectBusy =  4 
   InsufficientBuffer =  5 
   NotImplemented =  6 
   Win32Error =  7 
   WrongState =  8 
   Aborted =  9 
   FileNotFound =  10 
   ValueOverflow =  11 
   AccessDenied =  12 
   UnknownImageFormat =  13 
   FontFamilyNotFound =  14 
   FontStyleNotFound =  15 
   NotTrueTypeFont =  16 
   UnsupportedGdiplusVersion =  17 
   GdiplusNotInitialized =  18 
   PropertyNotFound =  19 
   PropertyNotSupported =  20 
   ProfileNotFound =  21 
End Enum

Private Declare Function GdiplusStartup Lib "gdiplus" ( _
   Token As Long, gpsi As GdiplusStartupInput, pvOutput As Any) As GpStatus
Private Declare Sub GdiplusShutdown Lib "gdiplus" ( _
   ByVal Token As Long)

Private Declare Function GdipLoadImageFromFile Lib "gdiplus" ( _
   ByVal pFileName As Long, pImage As Long) As GpStatus
Private Declare Function GdipDisposeImage Lib "gdiplus" ( _
   ByVal pImage As Long) As GpStatus

Private Declare Function GdipGetImageWidth Lib "gdiplus" ( _
   ByVal pImage As Long, nWidth As Long) As GpStatus
Private Declare Function GdipGetImageHeight Lib "gdiplus" ( _
   ByVal pImage As Long, nHeight As Long) As GpStatus
Private Declare Function GdipGetImageHorizontalResolution Lib "gdiplus" ( _
   ByVal pImage As Long, fResolution As Single) As GpStatus
Private Declare Function GdipGetImageVerticalResolution Lib "gdiplus" ( _
   ByVal pImage As Long, fResolution As Single) As GpStatus


Private Function GetPicDimPt(ByVal sFileName As String, _
                             fWidth As Single, fHeight As Single) As GpStatus
 Dim gpsRes As GpStatus
 Dim GdipSession As Long
 Dim gpsi As GdiplusStartupInput
 Dim gpiSrc As Long
 Dim nWidth As Long
 Dim nHeight As Long
 Dim fHorzRes As Single
 Dim fVertRes As Single
 Const PointsPerInch =  72 
 
 fWidth =  0 
 fHeight =  0 
 
 With gpsi
    .GdiplusVersion =  1 
    .DebugEventCallback =  0 
    .SuppressBackgroundThread =  0 
    .SuppressExternalCodecs =  1 
 End With
 
 gpsRes = GdiplusStartup(GdipSession, gpsi, ByVal  0 &)
 If gpsRes <> GpStatus.OK Then
    GetPicDimPt = gpsRes
    MsgBox "GDI+ Initialization Failed", vbCritical
    Exit Function
 End If
 
 gpsRes = GdipLoadImageFromFile(StrPtr(sFileName), gpiSrc)
 If gpsRes <> GpStatus.OK Then
    GetPicDimPt = gpsRes
    MsgBox "Image load failed. Error code " & gpsRes, vbCritical
    GdiplusShutdown GdipSession
    Exit Function
 End If
 
 gpsRes = GdipGetImageWidth(gpiSrc, nWidth)
 If gpsRes = GpStatus.OK Then
    gpsRes = GdipGetImageHeight(gpiSrc, nHeight)
    gpsRes = GdipGetImageHorizontalResolution(gpiSrc, fHorzRes)
    gpsRes = GdipGetImageVerticalResolution(gpiSrc, fVertRes)
    fWidth = nWidth * PointsPerInch / fHorzRes
    fHeight = nHeight * PointsPerInch / fVertRes
 Else
    MsgBox "GdipGetImageDimension() failed. Error code " & gpsRes, vbInformation
 End If
 GetPicDimPt = gpsRes
 
 gpsRes = GdipDisposeImage(gpiSrc)
 GdiplusShutdown GdipSession
End Function


Public Sub Test()
 Dim fn As String
 Dim h As Double
 Dim v As Double
 Dim fWidth As Single
 Dim fHeight As Single

 fn = "F:\DBases\SQL.ru\WordInAccess.png"
 If GetPicDimPt(fn, fWidth, fHeight) = GpStatus.OK Then
 
    h = ActiveCell.Left
    v = ActiveCell.Top
    
    ActiveWorkbook.ActiveSheet.Shapes.AddPicture fn, False, True, _
                                                 h, v, fWidth, fHeight
 End If
End Sub
...
Рейтинг: 0 / 0
EXCEL Вставка картинки
    #35652460
Aster32
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПишет ошибку Invalid Picture.

И мне кажется (как из справки поняла), LoadPicture используется в основном на формах (картинку на кнопку или другой контрол подгрузить).

Сорри, экспериментировал на картинках jpg - все работало. Ну а объект этот нам нужен только, чтобы "габариты" с него снять. Потом его можно тут же убить.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL Вставка картинки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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