如何使用VB6将非内联图片插入到word文档中?
How to insert a non-inline picture into a word document using VB6?
我正在尝试使用 VB^ 附带的 Microsoft word 15.0 对象库将图像插入到 word 文档中,而我看到的插入图形文件的唯一方法是通过以下方法:
oDoc.Range.InlineShapes.AddPicture ("C:\Users\name\Desktop\file.jpg")
但是,我想要一张图片,它可以放置在文本之上以及我想要它在文档中的位置...有什么方法可以使用 VB6 代码来实现吗?
Word 有两种不同的方式来管理图像和其他嵌入对象:作为 InlineShapes
和作为 Shapes
。第一个被视为与文本流中的字符相同;后者在与文本不同的层中具有文本换行格式和 "live"。
要插入图形文件作为 Shape
:
Dim shp as Word.Shape
Set shp = oDoc.Shapes.AddPicture(FileName, LinkToFile, _
SaveWithDocument, Left, Top, Width, Height, Anchor)
AddPicture
方法 returns 一个 Shape
对象。通常,这在插入对象后需要设置其他属性时很有用。例如为了指定文本换行格式。如果不需要 Shape
对象,则可以插入 Shape
而无需分配给对象。在这种情况下,省略括号:
oDoc.Shapes.AddPicture FileName, LinkToFile, _
SaveWithDocument, Left, Top, Width, Height, Anchor
虽然只有 FileName
参数是必需的,但最后一个参数 - Anchor
- 如果你想控制 图像的位置 非常重要插入时。
也可以作为 InlineShape
插入然后使用 ConvertToShape
以获得可以应用文本换行格式的 Shape
对象。
每个 Shape
必须 与文档中的范围相关联。除非另有说明,否则这将是当前选择所在段落的第一个字符。出于这个原因,我强烈建议将 Range
传递给 Anchor
参数中的 Shapes.AddPicture
方法。
请注意,一旦插入 Shape
,就无法直接更改 anchor
的位置。可以使用剪切和粘贴来完成。另一种可能是使用 ConvertToInlineShape
方法,这样您就可以使用 Range
移动图形,然后 ConvertToShape
将其转回 Shape
,但在此一些定位和包装属性可能需要重置。这里有一个使用 "convert" 方法的例子:
Sub MoveShapeToOtherRange()
Dim oDoc As Word.Document
Dim shp As Word.Shape
Dim ils As Word.InlineShape
Dim rngEnd As Word.Range, rngStart As Word.Range
Set oDoc = ActiveDocument
Set rngStart = oDoc.content
rngStart.Collapse wdCollapseStart 'start of document
Set rngEnd = Selection.Range
Set shp = oDoc.shapes.AddPicture(fileName:="C:\Test\icons\Addin_Icon16x16.png", _
Top:=0, Left:=10, anchor:=rngStart)
Set ils = shp.ConvertToInlineShape
Set rngStart = ils.Range
rngEnd.FormattedText = rngStart.FormattedText
rngStart.Delete
Set ils = oDoc.InlineShapes(1)
Set shp = ils.ConvertToShape
End Sub
默认情况下,Shape
将在 MoveWithText
激活的情况下插入。这意味着页面上的位置没有设置,编辑会影响垂直位置。例如,如果您希望 Shape
始终位于页面中央,请将其设置为 false。但是请注意,如果锚点移动到不同的页面,Shape
也会移动到该页面。
有时,Left
和 Top
参数在添加 Shape
时不会 "take" - 您可能需要在添加后再次将它们设置为属性.
好的,我最终做的是这样的:
Dim a As Object
On Error Resume Next
a = oDoc.Shapes.AddPicture("C:\Users\name\Desktop\file.jpg", , , 25, 25, 25, 25)
出于某种原因,这会将图像放在适当的位置和大小。当我查看“.AddPicture”的文档时,我意识到它 returns 是一个 Shapes 对象。所以我只是将它存储在一个一次性对象中。由于某种原因,它随后会以错误响应,但最终还是会放在文档上。所以我用了:
On Error Resume Next
这会跳过错误。之后,图片按预期放置,文档的其余部分按预期制作
感谢您的回答
我正在尝试使用 VB^ 附带的 Microsoft word 15.0 对象库将图像插入到 word 文档中,而我看到的插入图形文件的唯一方法是通过以下方法:
oDoc.Range.InlineShapes.AddPicture ("C:\Users\name\Desktop\file.jpg")
但是,我想要一张图片,它可以放置在文本之上以及我想要它在文档中的位置...有什么方法可以使用 VB6 代码来实现吗?
Word 有两种不同的方式来管理图像和其他嵌入对象:作为 InlineShapes
和作为 Shapes
。第一个被视为与文本流中的字符相同;后者在与文本不同的层中具有文本换行格式和 "live"。
要插入图形文件作为 Shape
:
Dim shp as Word.Shape
Set shp = oDoc.Shapes.AddPicture(FileName, LinkToFile, _
SaveWithDocument, Left, Top, Width, Height, Anchor)
AddPicture
方法 returns 一个 Shape
对象。通常,这在插入对象后需要设置其他属性时很有用。例如为了指定文本换行格式。如果不需要 Shape
对象,则可以插入 Shape
而无需分配给对象。在这种情况下,省略括号:
oDoc.Shapes.AddPicture FileName, LinkToFile, _
SaveWithDocument, Left, Top, Width, Height, Anchor
虽然只有 FileName
参数是必需的,但最后一个参数 - Anchor
- 如果你想控制 图像的位置 非常重要插入时。
也可以作为 InlineShape
插入然后使用 ConvertToShape
以获得可以应用文本换行格式的 Shape
对象。
每个 Shape
必须 与文档中的范围相关联。除非另有说明,否则这将是当前选择所在段落的第一个字符。出于这个原因,我强烈建议将 Range
传递给 Anchor
参数中的 Shapes.AddPicture
方法。
请注意,一旦插入 Shape
,就无法直接更改 anchor
的位置。可以使用剪切和粘贴来完成。另一种可能是使用 ConvertToInlineShape
方法,这样您就可以使用 Range
移动图形,然后 ConvertToShape
将其转回 Shape
,但在此一些定位和包装属性可能需要重置。这里有一个使用 "convert" 方法的例子:
Sub MoveShapeToOtherRange()
Dim oDoc As Word.Document
Dim shp As Word.Shape
Dim ils As Word.InlineShape
Dim rngEnd As Word.Range, rngStart As Word.Range
Set oDoc = ActiveDocument
Set rngStart = oDoc.content
rngStart.Collapse wdCollapseStart 'start of document
Set rngEnd = Selection.Range
Set shp = oDoc.shapes.AddPicture(fileName:="C:\Test\icons\Addin_Icon16x16.png", _
Top:=0, Left:=10, anchor:=rngStart)
Set ils = shp.ConvertToInlineShape
Set rngStart = ils.Range
rngEnd.FormattedText = rngStart.FormattedText
rngStart.Delete
Set ils = oDoc.InlineShapes(1)
Set shp = ils.ConvertToShape
End Sub
默认情况下,Shape
将在 MoveWithText
激活的情况下插入。这意味着页面上的位置没有设置,编辑会影响垂直位置。例如,如果您希望 Shape
始终位于页面中央,请将其设置为 false。但是请注意,如果锚点移动到不同的页面,Shape
也会移动到该页面。
有时,Left
和 Top
参数在添加 Shape
时不会 "take" - 您可能需要在添加后再次将它们设置为属性.
好的,我最终做的是这样的:
Dim a As Object
On Error Resume Next
a = oDoc.Shapes.AddPicture("C:\Users\name\Desktop\file.jpg", , , 25, 25, 25, 25)
出于某种原因,这会将图像放在适当的位置和大小。当我查看“.AddPicture”的文档时,我意识到它 returns 是一个 Shapes 对象。所以我只是将它存储在一个一次性对象中。由于某种原因,它随后会以错误响应,但最终还是会放在文档上。所以我用了:
On Error Resume Next
这会跳过错误。之后,图片按预期放置,文档的其余部分按预期制作
感谢您的回答