vba: comment définir la largeur et la hauteur d'un tableau excel en pixels?
une question en apparence simple. mais le réglage de la largeur et de la hauteur de la ChartObject
ou de ses Shape
ne pas le faire, ils ont tous deux semblent être juste une partie intérieure du rectangle blanc qui est le embeded graphique. aussi la ChartArea
ne semble pas être l'objet que je suis intéressé.
ce que je veux, c'est le fichier exporté dans l'exemple suivant pour avoir des dimensions 800x600 (et je ne veux pas dire redimensionnement de l'image exportée ou d'essai et d'erreur jusqu'à ce que la taille accidentellement fits). il doit y avoir un objet sur le graphique que j'ai négligé.
Sub mwe()
Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart
Dim cShape As Shape
Dim cArea As chartArea
filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.chart
Set cShape = sheet.Shapes(cObj.Name)
Set cArea = c.chartArea
cObj.Width = 800
cObj.Height = 400
MsgBox cArea.Width & " x " & cArea.Height '793x393
c.Export filepath & "test1.png" '1067x534, this is also the size on screen
cShape.Width = 800
cShape.Height = 400
MsgBox cArea.Width & " x " & cArea.Height '794x393
c.Export filepath & "test2.png" '1068x534, this is also the size on screen
End Sub
mise à jour:
il s'avère que la ChartObject
et la Shape
appartenant à la même Chart
ont déjà la Worksheet
en tant que parent. mais la largeur et la hauteur ne sont pas spécifiées en pixels comme je le pensais, mais dans les points, où 1 point = 1 /72e de pouce.
et la plupart du temps, windows semble supposer 96 pixels par pouce.
merci à steve commentaire, je suis en utilisant la suite maintenant, ce qui est tout à fait fiable. un ChartObject
qui n'est pas activé au moment de son exportation semble produire un fichier où la largeur et la hauteur est de 1 plus élevé qu'il devrait être.
il reste à savoir comment déterminer les facteurs px2ptH
et px2ptV
automatiquement.
Sub mwe()
Dim filepath As String
Dim sheet As Worksheet
Dim cObj As ChartObject
Dim c As Chart
Dim px2ptH As Double: px2ptH = 72 / 96
Dim px2ptV As Double: px2ptV = 72 / 96
Dim w As Double: w = 800 * px2ptH
Dim h As Double: h = 400 * px2ptV
filepath = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "\"))
Set sheet = ActiveSheet
Set cObj = sheet.ChartObjects(1)
Set c = cObj.Chart
'otherwise image size may deviate by 1x1
cObj.Activate
cObj.Width = w
cObj.Height = h
c.Export filepath & "test.png"
End Sub
debug.print cobj.parent.name
juste après cObj ? cela devrait vous donner le bon conseil.Je pense que la raison que vous êtes de ne pas obtenir exactement 800 x 400 est qu'excel utilise les pouces et pas de pixels et la précision est .01 pouces et à cause de cela vous n'obtenez exactement 800 400!
Depuis que vous avez correctement indiqué que l'exportation de l'image est de taille, basé sur la façon dont elle apparaît à l'écran, vous ne pouvez pas raisonnablement s'attendre à être en mesure de contrôler la taille du fichier. Même si vous effectuez un zoom avant ou arrière sur votre feuille, cela a un impact sur la taille du fichier. Je ne crois pas que vous pouvez modifier sans avoir une bien plus compliqué solution. Je vous suggère de vous assurer dimensions sont correctes et ensuite le transformer le fichier en tant que de besoin.
il donne le nom de la feuille de calcul. il n'est donc pas un englobante de l'objet que nous recherchons. mais quoi d'autre est en jeu ici? est l'unité par défaut pour la largeur et la hauteur en pixels, mais mm ou quelque chose?
Les dimensions sont dans les points, pas de pixels. 72 points par pouce. 800 pixels / 72 = 11.11111.... La taille de l'image exportée sera la taille en pouces/résolution de l'affichage de votre ordinateur, généralement 96 (comme c'est votre cas, mais vous ne pouvez pas toujours compter sur elle ... utilisation de REMPORTER des appels d'API pour trouver la valeur actuelle)
OriginalL'auteur peter | 2013-01-31
Vous devez vous connecter pour publier un commentaire.
Les dimensions sont dans les points, pas de pixels. 72 points par pouce.
800 pixels /72 = 11.11111.... La taille de l'image exportée sera la taille en pouces/résolution de l'affichage de votre ordinateur, généralement 96 (comme c'est votre cas, mais vous ne pouvez pas toujours compter sur elle ... utilisation de REMPORTER des appels d'API pour trouver la valeur actuelle)
Randy de Bouleau a publié un code que vous pouvez utiliser pour accéder à la WinAPI appels pour obtenir la résolution de l'écran et plus encore.
Aller à http://vbnet.mvps.org/index.html et utiliser la fonction de recherche sur la gauche pour rechercher GETDEVICECAPS
OriginalL'auteur Steve Rindsberg