链接的图像和表格到MS Word

我想自动化在Word中填充报告的过程。 我在400页的文件里有几百个数字和表格。 我使用Matlab来处理我的数据,将数字保存到有组织的文件夹中,并在Excel文件模板的不同选项卡中填充预格式化的表格。 我对这一面感到满意,但是复制和粘贴Word报表需要很多时间。

我将很快做一个非常类似的报告,我想完全删除填充报告的C和P部分,既保存在文件夹中的数字,也保存在汇总表的特定选项卡中的表格。 如果我可以设置一个自动刷新的模板,那么这将是非常棒的,因为有时候表和graphics构build过程是迭代的。 我在VBA中有less量的处理数据的经验,但是对于这个应用程序来说没有什么。 我从哪说起呢? 在正确的方向碰撞或链接到类似的问题将不胜感激。

如果插入链接到文件的图片的对象会怎么样? 这样,当文件名更改时,它们会自动更新? 这假定你总是有相同数量的图片,名称不会改变。

Selection.InlineShapes.AddOLEObject ClassType:="Paint.Picture", FileName:= _ "C:\Users\name\Pictures\test.bmp", LinkToFile:=True, DisplayAsIcon:= _ False 

假设您有一个文件夹设置了一个模板word文档,该文档具有指向另一个文件夹的图像链接,并且您要确保这些图像链接到按date(如20131008)命名的最新文件夹。您可以将图像链接到文件进行自动更新,但由于它是只读属性,因此无法以编程方式更改源path。 另一种方法是循环访问word文档中的每个对象,查看path是否是当前文件夹,如果不是,则删除原始文件并插入一个新文件。

下面是一个简单例子的代码。 如果在插入图像后对图像进行了任何增强,则可能必须复制定位和格式。 我build立了我的文件夹结构,如下所示,名称与date相同的每个文件夹都具有相同名称的图像。

在这里输入图像描述


用于OLEtypes链接到.bmp图像

 Sub LinkToCurrentImageFolder() 'Get current folder by date Dim clientFiguresPath As Variant filePath = ActiveDocument.Path & "\ClientFigures\" Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(filePath) Dim currentFolder As Variant: currentFolder = "" For Each sf In fld.SUBFOLDERS 'Look at name and get current date If currentFolder = "" Then currentFolder = sf.Path ElseIf sf.Path > currentFolder Then currentFolder = sf.Path End If Next ' Debug: display current figure folder path 'MsgBox (currentFolder) 'Loop through all shapes in document and check if path is current. 'If path is not current delete current shape and add new because SourcePath is read-only Dim Ishape As InlineShape, Wdoc As Document MsgBox (ActiveDocument.InlineShapes.Count) For Each Ishape In ActiveDocument.InlineShapes If Not GetSourceInfo(Ishape) Then GoTo nextshape With Ishape currentPath = .LinkFormat.SourcePath If currentPath <> currentFolder Then cType = .OLEFormat.ClassType shpName = .LinkFormat.SourceName newPath = currentFolder & "\" & shpName 'Delete existing image .Delete 'Create new image Selection.InlineShapes.AddOLEObject ClassType:=cType, FileName:=newPath, LinkToFile:=True, DisplayAsIcon:=False End If End With nextshape: Next Ishape End Sub Function GetSourceInfo(oShp As InlineShape) As Boolean On Error GoTo Error_GetSourceInfo Test = oShp.LinkFormat.SourceFullName GetSourceInfo = True Exit Function Error_GetSourceInfo: GetSourceInfo = False End Function 

编辑

我已经更改此代码以使用链接到文件但不是OLEtypes的图像。 这假定你正在通过这个方法插入图像:

在这里输入图像说明


 Sub LinkToCurrentImageFolder() 'Get current folder by date Dim clientFiguresPath As Variant filePath = ActiveDocument.Path & "\ClientFigures\" Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(filePath) Dim currentFolder As Variant: currentFolder = "" For Each sf In fld.SUBFOLDERS 'Look at folder name/date and get most current date If currentFolder = "" Then currentFolder = sf.Path ElseIf sf.Path > currentFolder Then currentFolder = sf.Path End If Next Dim Ishape As InlineShape For Each Ishape In ActiveDocument.InlineShapes If Ishape.Type = msoComment Then With Ishape currentPath = .LinkFormat.SourcePath If currentPath <> currentFolder Then shpName = .LinkFormat.SourceName newPath = currentFolder & "\" & shpName 'Delete existing image .Delete 'Create new image Selection.InlineShapes.AddPicture FileName:=newPath, LinkToFile:=True, SaveWithDocument:=True End If End With End If Next Ishape End Sub