Разница в коде между документами .doc и .docx при вставке изображения в нижний колонтитул - PullRequest
1 голос
/ 02 июля 2019

Я хочу вставить изображение в Word в определенном месте в нижнем колонтитуле.Я использую этот код для ". Doc" документов:

Option Explicit
Sub CATMain()
Dim strPathImg As String
strPathImg = "C:\Test\Img.png"
Dim wrdApp
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Dim myWrdDoc
Set myWrdDoc = wrdApp.Documents.Open("C:\Test\Document.doc") 'chage path for .docx to: "C:\Test\Document.docx"
Dim wrdFootShape
Set wrdFootShape = myWrdDoc.Sections.Last.Footers(1).Shapes
Dim objPic As Object
Set objPic = wrdFootShape.AddPicture(FileName:=strPathImg, 
LinkToFile:=False, SaveWithDocument:=True, Left:=120, Top:=50)
End Sub  

, и это прекрасно работает, за исключением документов ". Docx" .Эта строка кода не вставляет изображение и не отображает никаких ошибок.

Какой подход использовать для вставки изображения в определенное место в нижнем колонтитуле в документах типа ".docx"?

Заранее спасибо, оцените каждый ответ

1 Ответ

1 голос
/ 04 июля 2019

Некоторые версии Word имеют тенденцию отталкивать графический объект от страницы (слишком высоко, слишком низко, слишком далеко влево или вправо). Новый графический движок был представлен с новыми форматами файлов и, вероятно, (по крайней мере, частично) ответственен за эту разницу между doc и docx.

Для примера в вопросе файлы doc интерпретируют позиционные свойства относительно StoryRange, в который вставляется Shape. Для файлов docx это, скорее всего, будет относиться к странице документа, а не к конкретному Story. (Ссылка на язык для AddPicture упоминает относительно холст для рисования .)

Код в вопросе помещает графическое изображение на 50 пунктов сверху вниз, что толкает его ниже страницы в файле doc . В файле docx изображение располагается в верхней части документа.

Следующий пример кода, основанный на коде в вопросе, показывает, как это можно сделать, протестировав SaveFormat документа. Возможны другие форматы сохранения, это касается только двух обсуждаемых форматов файлов.

'Insert Shape into Footer
'behaves differently for doc/docx
Sub CATMain()
    Dim strPathImg As String
    strPathImg = "C:\Test\avatar.jpg"
    Dim wrdApp
    Set wrdApp = CreateObject("Word.Application")
    wrdApp.Visible = True
    Dim myWrdDoc
    Set myWrdDoc = 'wrdApp.Documents.Open("C:\Test\Document.doc") 'change path for .docx to: "C:\Test\Document.docx"

    Dim wrdFootShape
    Set wrdFootShape = myWrdDoc.Sections.Last.Footers(1).Shapes
    Dim objPic As Object
    Dim posPic As Double
    'Convert position in centimeters to points for the AddPicture method
    posPic = CentimetersToPoints(2)

    If myWrdDoc.SaveFormat = 0 Then
        'correction for doc file
        posPic = posPic - myWrdDoc.PageSetup.PageHeight + myWrdDoc.PageSetup.TopMargin
    ElseIf myWrdDoc.SaveFormat = 12 Then
        'docx file
        posPic = posPic
    End If
    Set objPic = wrdFootShape.AddPicture(fileName:=strPathImg, _
      LinkToFile:=False, SaveWithDocument:=True, Left:=120, Top:=posPic)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...