如何:在 Visio 文档中复制和粘贴形状
您可以以编程方式复制文档中某一页上的形状,并将其粘贴到同一文档中的新页中。 您可以选择将其粘贴到默认位置(活动窗口的中心),或粘贴到与其在原始页中的坐标位置相同的坐标位置。
复制和粘贴形状
有关对象模型的详细信息,请参见 Microsoft.Office.Interop.Visio.Shape.DrawRectangle、Microsoft.Office.Interop.Visio.Shape.DrawOval、Microsoft.Office.Interop.Visio.Shape.Copy 和 Microsoft.Office.Interop.Visio.Shape.Paste 方法以及 Microsoft.Office.Interop.Visio.VisCutCopyPasteCodes.visCopyPasteNormal 标志的 VBA 参考文档。
将形状复制到另一页的中心
下面的示例演示如何从第一页复制形状并将其粘贴到第二页的中心。
Me.Application.Documents.Add("") Dim copyPage As Visio.Page Dim pastePage As Visio.Page Dim rectangle As Visio.Shape = Nothing Dim oval As Visio.Shape = Nothing Dim visioPages As Visio.Pages = Me.Application.ActiveDocument.Pages visioPages.Add() Try copyPage = visioPages(1) rectangle = copyPage.DrawRectangle(1.1, 2.2, 4.5, 6.7) oval = copyPage.DrawOval(1, 8.75, 3.5, 6.25) Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try Try pastePage = visioPages(2) rectangle.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNormal) pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNormal) oval.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNormal) pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNormal) Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try
this.Application.Documents.Add(""); Visio.Page copyPage; Visio.Page pastePage; Visio.Shape rectangle = null; Visio.Shape oval = null; Visio.Pages visioPages = this.Application.ActiveDocument.Pages; visioPages.Add(); try { copyPage = visioPages[1]; rectangle = copyPage.DrawRectangle(1.1, 2.2, 4.5, 6.7); oval = copyPage.DrawOval(1, 8.75, 3.5, 6.25); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } try { pastePage = visioPages[2]; rectangle.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNormal); pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNormal); oval.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNormal); pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNormal); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); }
按相同的位置复制和粘贴形状
有关对象模型的详细信息,请参见 Microsoft.Office.Interop.Visio.Shape.DrawRectangle、Microsoft.Office.Interop.Visio.Shape.DrawOval、Microsoft.Office.Interop.Visio.Shape.Copy 和 Microsoft.Office.Interop.Visio.Shape.Paste 方法以及 Microsoft.Office.Interop.Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate 标志的 VBA 参考文档。
如果需要控制所粘贴信息的格式并(可选)建立到源文件(例如 Microsoft Office Word 文档)的链接,请使用 PasteSpecial 方法。
将形状和形状位置复制到另一页
下面的示例演示如何从第一页复制形状并按照其原来的坐标位置将其粘贴到第二页中。
Me.Application.Documents.Add("") Dim copyPage As Visio.Page Dim pastePage As Visio.Page Dim rectangle As Visio.Shape = Nothing Dim oval As Visio.Shape = Nothing Dim visioPages As Visio.Pages = Me.Application.ActiveDocument.Pages visioPages.Add() Try copyPage = visioPages(1) rectangle = copyPage.DrawRectangle(1.1, 2.2, 4.5, 6.7) oval = copyPage.DrawOval(1, 8.75, 3.5, 6.25) Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try Try pastePage = visioPages(2) rectangle.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate) pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate) oval.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate) pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate) Catch ex As Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try
this.Application.Documents.Add(""); Visio.Page copyPage; Visio.Page pastePage; Visio.Shape rectangle = null; Visio.Shape oval = null; Visio.Pages visioPages = this.Application.ActiveDocument.Pages; visioPages.Add(); try { copyPage = visioPages[1]; rectangle = copyPage.DrawRectangle(1.1, 2.2, 4.5, 6.7); oval = copyPage.DrawOval(1, 8.75, 3.5, 6.25); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } try { pastePage = visioPages[2]; rectangle.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate); pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate); oval.Copy(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate); pastePage.Paste(Visio.VisCutCopyPasteCodes.visCopyPasteNoTranslate); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); }