Мне нужно экспортировать мой лист Excel в изображение с указанным размером c (или, по крайней мере, с соотношением сторон).
Я создал квадратную сетку, установив столбцы и строки одинакового размера в макете страницы Режим. Если я экспортирую нужную область с помощью сценария (см. Сценарий ниже) или просто вставив копию в рисование, она имеет другое соотношение сторон, чем я ожидаю.
Data from my experiments:
Row height: 0.38 cm
Column width: 0.38 cm
Area: 64 columns x 40 boxes --> Ratio of 1.6:1
Copy/Paste to paint: 897 x 601 (1.49:1)
VBA Export (Zoom-coef. 1): 1024 x 680 (1.51:1)
VBA Export (Zoom-coef. 2): 2048 x 1360 (1.51:1)
Что создает эту странную разницу в соотношение сторон?
Сценарий экспорта изображений VBA:
Sub ExportImage()
exportpath = "C:\Users\ ..."
rr = "A1:BL40"
Set xWs = ActiveWorkbook.ActiveSheet
'Captures current window view
sView = ActiveWindow.View
'Sets the current view to normal so there are no "Page X" overlays on the image
ActiveWindow.View = xlNormalView
'Temporarily disable screen updating
Application.ScreenUpdating = False
'Selection Print Area
xWs.PageSetup.PrintArea = xWs.Range(rr).Resize(xWs.Range(rr).Rows.Count, xWs.Range(rr).Columns.Count).Address
'Export print area as correctly scaled PNG image, courtasy of Winand
'Lukasz: zoom_coef can be constant = 0 to 5 can work too, but save is 0 to 4
zoom_coef = 2
Set area = xWs.Range(xWs.PageSetup.PrintArea)
area.CopyPicture xlPrinter
Set chartobj = xWs.ChartObjects.Add(0, 0, area.Width * zoom_coef, area.Height * zoom_coef)
chartobj.Activate
chartobj.Chart.Paste
chartobj.Chart.Export exportpath, "png"
chartobj.Delete
'Returns to the previous view
ActiveWindow.View = sView
'Re-enables screen updating
Application.ScreenUpdating = True
End Sub
edit: Кажется, проблема в Excels - очень глупый способ измерения высоты строки и ширины столбца в совершенно разных и крипти c единицах. См. Статью блога