Je souhaite placer un logo dans le coin supérieur droit de chaque page d'un document. Cette fonctionnalité est déjà présente dans un complément Word géré par nous. Cependant, cette fonctionnalité ne fonctionne pas correctement. Le complément convertit l'image en forme et place cette image à une distance fixe du coin gauche du document. Cela fonctionne pour les documents au format A4, mais chaque fois que l'orientation ou la taille du document change, le placement du logo est désactivé.VSTO Word & Visual basic: la propriété Shape.Left ne prend pas la valeur affectée
J'ai essayé de nombreuses stratégies pour résoudre ce problème, mais je n'ai pas trouvé de méthode satisfaisante. Ma stratégie actuelle consiste à déterminer dynamiquement la distance entre le côté gauche de la page et le logo, puis à faire cette position par rapport au côté droit de la page en appelant la propriété .RelativeHorizontalPosition et en la reliant à la zone de marge droite.
Malheureusement, l'interaction avec la propriété .Left de l'objet Shape a été gênante. La propriété .Left ne prend pas la valeur que je lui assigne, mais prend une valeur négative. J'ai vérifié le paramètre que je lui assigne plusieurs fois. Quelqu'un sait-il pourquoi c'est le cas et comment le résoudre?
Exemple de code
Private Sub AddLogos(section As Section, header As HeaderFooter)
Dim wordApp As Word.Application = Globals.ThisAddIn.Application
Dim pageWidth As Single = section.PageSetup.PageWidth
Dim imgFilePath As String = "filepath"
Dim leftDistanceA4 As Single = 11
Dim logo As Word.Shape
Try
If wordApp.ActiveDocument.SaveFormat >= 12 Then
logo = header.Range.InlineShapes.AddPicture(m_sImageLogo, False, True).ConvertToShape()
Else 'Word 97-2003 Support
logo = header.Shapes.AddPicture(imgFilePath, False, True)
End If
Catch ex As Exception
Throw New Exception("Error message.")
End Try
Dim distanceFromRightPageEdge = wordApp.CentimetersToPoints(21 - leftDistanceA4)
Dim distanceFromLeftPageEdge = pageWidth - distanceFromRightPageEdge
With logo
.RelativeVerticalPosition = WdRelativeVerticalPosition.wdRelativeVerticalPositionPage
.Left = distanceFromLeftPageEdge
.RelativeHorizontalPosition = WdRelativeHorizontalPosition.wdRelativeHorizontalPositionRightMarginArea
End With
Merci pour votre réponse! J'étais conscient de la technique suivante, mais avec cette technique, je n'étais pas capable de laisser un espace blanc entre la forme/le logo et les coins de la page. Y at-il un moyen d'ajuster ce code, de sorte que le logo sera placé à 1 ou 2 cm des coins supérieur et droit? – Fluous
Voir l'édition, les formes en ligne ont beaucoup d'options de mise en forme graphique, mais pas autant d'options de mise en page. L'utilisation d'une table pour maintenir la forme vous donnera beaucoup plus de contrôle sur la mise en page. – soohoonigan