如何使用C#进行Visio二次开发

      Visio在VB6中的开发有很多现成的项目及代码,但在.NET领域相对比较滞后,但是从Visio SDK2007发布以来,给予Visio的C#开发逐渐多了起来,虽然和VB6的开发思路有一定的相似,不过平台不一样,做出来的东西差别还是有一定的距离,虽然总体慢一点,但是,DotNET框架的逐渐强大以及更多的DotNet程序和开发人员的加入,带给大家更高的整合价值以及更美好的发展未来。
    本人将会在C#领域将Visio的二次开发进行下去,希望大家一起学习研究,碰撞出更美的火花

Visio Drawing Control控件使用
Visio开发必备
    Visio SDK 2007
         VisSDK.chm
         Visio Code Samples Library.chm
 Visio文档操作
     查看ShapeSheet属性及帮助内容
     宏的录制

Visio的几个重要对象

如何使用C#进行Visio二次开发_编程 Application
如何使用C#进行Visio二次开发_编程 Window (Application.ActiveWindow)
如何使用C#进行Visio二次开发_编程 Document (Application.ActiveDocument)
如何使用C#进行Visio二次开发_编程 Master、Shape

如何使用C#进行Visio二次开发_编程_05

Visio XML格式文件分析
 Master格式
如何使用C#进行Visio二次开发_Visio二次开发_06
 
Pages/Shapes格式 
如何使用C#进行Visio二次开发_编程_07

 图纸的XML文档中,Master后面的Shapes集合中只有一个Shape对象
 图纸的Shapes集合有多个对象,每个对象的NameU和Name值可能不一样,一般使用NameU


Visio基本操作的实现

如何使用C#进行Visio二次开发_编程VisApplication = this.ctrlDrawing.Document.Application;
如何使用C#进行Visio二次开发_编程VisWindow = VisApplication.ActiveWindow;
如何使用C#进行Visio二次开发_编程VisDocument = VisApplication.ActiveDocument;
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//Settings
如何使用C#进行Visio二次开发_编程VisApplication.Settings.ShowShapeSearchPane = false; //显示搜索形状窗体
如何使用C#进行Visio二次开发_编程VisApplication.Settings.EnableAutoConnect = false; //自动链接(2007默认)
如何使用C#进行Visio二次开发_编程VisApplication.Settings.StencilBackgroundColor = 10070188; //vbGrayText
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//文档各种显示
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdViewRulers);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdViewGrid);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.ShowGuides);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.ShowConnectPoints);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.ShowPageBreaks);
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//各种窗口
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdShapesWindow);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdPanZoom);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdCustProp);
如何使用C#进行Visio二次开发_编程VisApplication.DoCmd((short)VisUICmds.visCmdSizePos);
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程SendKeys.Send("^(x)");
如何使用C#进行Visio二次开发_编程//VisApplication.DoCmd((short)VisUICmds.visCmdUFEditCut);
如何使用C#进行Visio二次开发_编程SendKeys.Send("{DELETE}");
如何使用C#进行Visio二次开发_编程//VisApplication.DoCmd((short)VisUICmds.visCmdUFEditClear);
如何使用C#进行Visio二次开发_编程SendKeys.Send("^+(p)");
如何使用C#进行Visio二次开发_编程//VisApplication.DoCmd(VisUICmds.visCmdFormatPainter);
如何使用C#进行Visio二次开发_编程SendKeys.Send("^(z)");
如何使用C#进行Visio二次开发_编程//VisApplication.DoCmd(VisUICmds.visCmdEditUndo);

调用工具条对象、菜单对象的方法
Application.CommandBars
Microsoft.Office.Core.CommandBars共享Office对象模型
使用CommandBar代替UIObject
CommandBar对象中,菜单及工具条是同一个东西
CommandBar、CommandBarButton、 CommandBarComboBox、CommandBarControl、 和 CommandBarPopup

示例:执行视图中的工具条的所有按钮事件。
如何使用C#进行Visio二次开发_编程Microsoft.Office.Core.CommandBars commandBars;
如何使用C#进行Visio二次开发_编程commandBars = (Microsoft.Office.Core.CommandBars)VisApplication.CommandBars;
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程foreach (Microsoft.Office.Core.CommandBarControl control in commandBars["View"].Controls)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    Microsoft.Office.Core.CommandBarButton button =  control as  Microsoft.Office.Core.CommandBarButton;
如何使用C#进行Visio二次开发_编程_44    if (button != null)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        button.Execute();
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程StringBuilder sb = new StringBuilder();
如何使用C#进行Visio二次开发_编程foreach (Microsoft.Office.Core.CommandBar bar in commandBars)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    sb.Append(string.Format("CommandBar Name:{0}\r\n", bar.Name));
如何使用C#进行Visio二次开发_编程_44    foreach(Microsoft.Office.Core.CommandBarControl control in bar.Controls)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        Microsoft.Office.Core.CommandBarButton button =  control as  Microsoft.Office.Core.CommandBarButton;
如何使用C#进行Visio二次开发_编程_44        if(button != null)
如何使用C#进行Visio二次开发_Visio二次开发_46        {
如何使用C#进行Visio二次开发_编程_44            sb.Append(string.Format("Button Name:{0} \r\n", button.Caption));
如何使用C#进行Visio二次开发_Visio二次开发_48        }                    
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程Form2 frm = new Form2();
如何使用C#进行Visio二次开发_编程frm.txtContent.Text = sb.ToString();
如何使用C#进行Visio二次开发_编程frm.Show();
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程short flags = (short)VisOpenSaveArgs.visOpenDocked | (short)VisOpenSaveArgs.visOpenRO;
如何使用C#进行Visio二次开发_编程StencilOpenEx(wndVisio.Application, flags);
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程_43/// <summary>
如何使用C#进行Visio二次开发_编程_44/// 打开模具的公共方法
如何使用C#进行Visio二次开发_编程_44/// </summary>
如何使用C#进行Visio二次开发_编程_44/// <param name="visApp">按引用调用的VisioApplication对象</param>
如何使用C#进行Visio二次开发_Visio二次开发_49/// <param name="flags">打开的模式</param>
如何使用C#进行Visio二次开发_编程private void StencilOpenEx(Application visApp, short flags)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    List<string> stencilList = GetStencils();
如何使用C#进行Visio二次开发_编程_44    string stencilFileName;
如何使用C#进行Visio二次开发_编程_44    
如何使用C#进行Visio二次开发_编程_44    foreach(string stencil in stencilList)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        stencilFileName = GetStencilsFileName(stencil);
如何使用C#进行Visio二次开发_编程_44        if(!string.IsNullOrEmpty(stencilFileName))
如何使用C#进行Visio二次开发_Visio二次开发_46        {
如何使用C#进行Visio二次开发_编程_44            visApp.Documents.OpenEx(Portal.gc.gStencileFileBasePath + stencilFileName, flags);
如何使用C#进行Visio二次开发_Visio二次开发_48        }
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//关闭模具文件
如何使用C#进行Visio二次开发_编程visApp.Documents["Switch.vss"].Close();
如何使用C#进行Visio二次开发_编程visApp.Documents["Span.vss"].Close();
如何使用C#进行Visio二次开发_编程visApp.Documents["Line.vss"].Close();
如何使用C#进行Visio二次开发_编程visApp.Documents["Label.vss"].Close();
如何使用C#进行Visio二次开发_编程visApp.Documents["Construct.vss"].Close();
如何使用C#进行Visio二次开发_编程visApp.Documents["Monitor.vss"].Close();


Visio Shape的属性操作
  StringToFormulaForString、FormulaStringToString函数
  访问属性
  设置属性
  添加属性

如何使用C#进行Visio二次开发_编程//列出模具组
如何使用C#进行Visio二次开发_编程this.cmbStencilGroup.Items.Clear();
如何使用C#进行Visio二次开发_编程List<string> stencilGroups = stencil.GetStencils();
如何使用C#进行Visio二次开发_编程foreach (string group in stencilGroups)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    this.cmbStencilGroup.Items.Add(group);
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//根据模具组列出模具
如何使用C#进行Visio二次开发_编程string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text);
如何使用C#进行Visio二次开发_编程this.cmbStencil.Items.Clear();
如何使用C#进行Visio二次开发_编程string tempName;
如何使用C#进行Visio二次开发_编程foreach (Master master in visApp.Documents[stencilName].Masters)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    tempName = master.Name;
如何使用C#进行Visio二次开发_编程_44    if (!stencil.IsExcludeItem(tempName))
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        this.cmbStencil.Items.Add(tempName);
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//根据模具,获取对应的属性集合,遍历属性集合,列出属性名称
如何使用C#进行Visio二次开发_编程string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text);
如何使用C#进行Visio二次开发_编程string masterName = this.cmbStencil.Text;
如何使用C#进行Visio二次开发_编程Visio.Shape shape = visApp.Documents[stencilName].Masters[masterName].Shapes[1];
如何使用C#进行Visio二次开发_编程if (shape != null)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    List<StencilPropertyInfo> propInfos = property.GetPropertyCollection(shape);
如何使用C#进行Visio二次开发_编程_44    foreach (StencilPropertyInfo info in propInfos)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        this.cmbProperty.Items.Add(info.Name);
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//根据模具、模具属性,列出对应的属性信息
如何使用C#进行Visio二次开发_编程string stencilName = stencil.GetStencilsFileName(this.cmbStencilGroup.Text);
如何使用C#进行Visio二次开发_编程string masterName = this.cmbStencil.Text;
如何使用C#进行Visio二次开发_编程Visio.Shape shape = visApp.Documents[stencilName].Masters[masterName].Shapes[1];
如何使用C#进行Visio二次开发_编程StencilPropertyInfo info = property.GetProperty(shape, this.cmbProperty.Text);
如何使用C#进行Visio二次开发_编程if (info != null)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    this.txtName.Text = info.Name;//属性名称
如何使用C#进行Visio二次开发_编程_44    this.txtValue.Text = info.Value;//属性值
如何使用C#进行Visio二次开发_编程_44    this.txtFormat.Text = info.Format;//属性格式
如何使用C#进行Visio二次开发_编程_44    this.txtSortKey.Text = info.Sort;//属性的排序
如何使用C#进行Visio二次开发_编程_44    this.txtPrompt.Text = info.Prompt;//属性的提示信息
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//根据模具,获取属性对象集合
如何使用C#进行Visio二次开发_编程public List<StencilPropertyInfo> GetPropertyCollection(Visio.Shape shape)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    List<StencilPropertyInfo> list = new List<StencilPropertyInfo>();
如何使用C#进行Visio二次开发_编程_44    StencilPropertyInfo propertyInfo;
如何使用C#进行Visio二次开发_编程_44    Visio.Cell shapeCell;
如何使用C#进行Visio二次开发_编程_44    short shortSectionProp = (short)VisSectionIndices.visSectionProp;
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44    if (shape != null)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        for (short i = 0; i < shape.get_RowCount(shortSectionProp) - 1; i++ )
如何使用C#进行Visio二次开发_Visio二次开发_46        {
如何使用C#进行Visio二次开发_编程_44            if (shape.get_CellsSRCExists(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel, 0) != 0)
如何使用C#进行Visio二次开发_Visio二次开发_46            {
如何使用C#进行Visio二次开发_编程_44                propertyInfo = new StencilPropertyInfo();
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsLabel);
如何使用C#进行Visio二次开发_编程_44                propertyInfo.Name = VisioUtility.FormulaStringToString(shapeCell.RowNameU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsPrompt);
如何使用C#进行Visio二次开发_编程_44                propertyInfo.Prompt = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsFormat);
如何使用C#进行Visio二次开发_编程_44                propertyInfo.Format = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsValue);
如何使用C#进行Visio二次开发_编程_44                propertyInfo.Value = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsSortKey);
如何使用C#进行Visio二次开发_编程_44                propertyInfo.Sort = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                //shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsType);
如何使用C#进行Visio二次开发_编程_44                //propertyInfo.PropType = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                //shapeCell = shape.get_CellsSRC(shortSectionProp, i, (short)VisCellIndices.visCustPropsInvis);
如何使用C#进行Visio二次开发_编程_44                //propertyInfo.InVisible = VisioUtility.FormulaStringToString(shapeCell.FormulaU);
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44                //如何使用C#进行Visio二次开发_Visio二次开发_189如何使用C#进行Visio二次开发_Visio二次开发_189如何使用C#进行Visio二次开发_Visio二次开发_189..
如何使用C#进行Visio二次开发_编程_44                list.Add(propertyInfo);
如何使用C#进行Visio二次开发_Visio二次开发_48            }
如何使用C#进行Visio二次开发_Visio二次开发_48        }
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44    return list;
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程
如何使用C#进行Visio二次开发_编程//根据模具和属性名称,获取属性对象信息
如何使用C#进行Visio二次开发_编程public StencilPropertyInfo GetProperty(Visio.Shape shape, string propertyName)
如何使用C#进行Visio二次开发_编程_43{
如何使用C#进行Visio二次开发_编程_44    List<StencilPropertyInfo> list = GetPropertyCollection(shape);
如何使用C#进行Visio二次开发_编程_44    StencilPropertyInfo propertyInfo = null;
如何使用C#进行Visio二次开发_编程_44    foreach(StencilPropertyInfo tempInfo in list)
如何使用C#进行Visio二次开发_Visio二次开发_46    {
如何使用C#进行Visio二次开发_编程_44        if (tempInfo.Name == propertyName)
如何使用C#进行Visio二次开发_Visio二次开发_46        {
如何使用C#进行Visio二次开发_编程_44            propertyInfo = tempInfo;
如何使用C#进行Visio二次开发_编程_44            break;
如何使用C#进行Visio二次开发_Visio二次开发_48        }
如何使用C#进行Visio二次开发_Visio二次开发_48    }
如何使用C#进行Visio二次开发_编程_44
如何使用C#进行Visio二次开发_编程_44    return propertyInfo;
如何使用C#进行Visio二次开发_Visio二次开发_49}
如何使用C#进行Visio二次开发_编程_217主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架/混合式开发框架、Web开发框架、Bootstrap开发框架、微信门户开发框架的研究及应用。
  转载请注明出处:
如何使用C#进行Visio二次开发_编程_217撰写人:伍华聪