您现在的位置是:首页 > 正文

C#读Visio模型数据

2024-02-01 01:17:11阅读 2

第一步:安装Visio

安装相应版本的Visio(以64位为例),在安装过程中经常遇到下面的问题

解决方法:

按“win+R”快捷键,打开“运行”,输入“regedit”,打开注册表,找到【HKEY_CLASSES_ROOT】àInstalleràProducts

备份注册表,然后将上面Office 16 Click-to-run Extensiblity Component删除,然后再次安装即可成功。

第二步:添加引用

在项目中添加COM组件引用

我安装的是Visio 2013版本,因此添加15.0版本的类库引用

第三步:准备Viso文件

在Viso中画了如下简单图形,

Visio.Application app = null;
            Visio.Document doc = null;
            try
            {
                app = new Visio.Application();
                app.Visible = false;
                doc = app.Documents.Open(fname);
                var shapes = ((Visio.PageClass)((Visio.DocumentClass)doc).Pages[1]).Shapes;
                var dt = new DataTable();
                string[] cols = new string[] { "ID", "名称", "起始坐标", "结束坐标", "角度" };
                foreach (var item in cols)
                {
                    dt.Columns.Add(item);
                }
                foreach (Visio.Shape shape in shapes)
                {
                    var dr = dt.NewRow();
                    dr[0] = shape.ID;
                    dr[1] = shape.Text;
                    dr[2] = $"({shape.Cells["BeginX"].Formula},{shape.Cells["BeginY"].Formula})";
                    dr[3] = $"({shape.Cells["EndX"].Formula},{shape.Cells["EndY"].Formula})";
                    try
                    {
                        var x1 = double.Parse(shape.Cells["BeginX"].Formula.Replace("mm", "").Trim());
                        var x2 = double.Parse(shape.Cells["EndX"].Formula.Replace("mm", "").Trim());
                        var y1 = double.Parse(shape.Cells["BeginY"].Formula.Replace("mm", "").Trim());
                        var y2 = double.Parse(shape.Cells["EndY"].Formula.Replace("mm", "").Trim());
                        dr[4] = Math.Atan2(y2 - y1, x2 - x1);
                    }
                    catch (Exception e)
                    {
                    }
                    //对于圆形没有起始结束坐标,有圆心坐标
                    if(string.IsNullOrEmpty(shape.Cells["BeginX"].Formula))
                    {
                        dr[2] = $"({shape.Cells["PinX"].Formula},{shape.Cells["PinY"].Formula})";
                        dr[3] = string.Empty;
                    }
                    dt.Rows.Add(dr);
                }
                return dt;
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                doc.Close();
                app.Quit();
            }

读取的数据如下:

以上就是一个简单读取Visio中模型数据的Demo,对于读取Viso字段值如果不知道字段名字可以打开Visio文件,进入开发者模式,然后右击选中的Shape展示ShapeSheet,可以看到相关的全部字段及对应的值。

网站文章

  • [学习记录] Redis 5. 事务和锁机制,秒杀案例 Demo

    [学习记录] Redis 5. 事务和锁机制,秒杀案例 Demo

    [学习记录] Redis 5. 事务和锁机制,秒杀案例 Demo

    2024-02-01 01:17:07
  • P5735 【深基7.例1】距离函数

    P5735 【深基7.例1】距离函数给出平面坐标上不在一条直线上三个点坐标 (x1,y1),(x2,y2),(x3,y3)(x_1,y_1),(x_2,y_2),(x_3,y_3)(x1,y1),(x...

    2024-02-01 01:16:37
  • C# - JSON详解

    C# - JSON详解

    最近在做微信开发时用到了一些json的问题,就是把微信返回回来的一些json数据做一些处理,但是之前json掌握的不好,浪费了好多时间在查找一些json有关的转换问题,我所知道的方法只有把json序列化和反序列化一下,但是太麻烦了我觉得,所以就在找一些更简单又方便使用的方法。也许这个会有用吧,所以先放到这以后能用到的。原文出处:http://www.cnblogs.com/mcgra...

    2024-02-01 01:16:29
  • yum安装mongodb报错

    yum安装mongodb报错

    今天在尝试yum安装mongodb时,发现了问题:这是因为你以前用的是CENTOS现在是redhat 红帽的yum安装软件的时候要验证的看是不是红帽的软件,是红帽的软件可以安装不是就失败.因此,我们需要将gpgcheck=1改成gpgcheck=0即可。gpgcheck=1表示需要验证,0表示不需要验证。成功!...

    2024-02-01 01:16:13
  • 用nginx反向代理Jenkins遇到的testForReverseProxySetup问题

    用nginx反向代理Jenkins遇到的testForReverseProxySetup问题

    又一次开始了Jenkins征程,其实以前我就遇到了这个问题,如图 你说你报这个错误鬼知道是为什么,当然了,我们也不能太苛求,Jenkins怎么可能知道具体是什么问题呢?算啦,我们自己去看Jenkins的日志吧,我发现 WARNING: http://jenkins.tangxuyang.cn/manage vs. http: 然后又结合chrome的F12,如下 就是这个请求没有正...

    2024-02-01 01:15:44
  • 为什么在vue3中每个页面都需要引用ref,reactive的问题

    为什么在vue3中每个页面都需要引用ref,reactive的问题

    在 Vue 3 中,对响应式数据的追踪和更新机制进行了优化,使得响应式数据的更新更加高效。,而不是自动引入,是因为 Vue 3 中引入了 Tree Shaking 机制,这种机制可以对无用的代码进行剪...

    2024-02-01 01:15:37
  • 使用 kind 1 分钟启动一个本地 k8s 开发集群

    使用 kind 1 分钟启动一个本地 k8s 开发集群

    使用 kind 1 分钟启动一个本地 k8s 开发集群kind 简介Github 地址:https://github.com/kubernetes-sigs/kindkind 是一个快速启动 kube...

    2024-02-01 01:15:33
  • 【python】时间处理函数以及文件操作

    1. 时间函数模块(库)-使用流程:先导入,再引用1:导入 方式一:import 模块名 引用:模块名.函数名() 方式二:from 模块名 import 函数名/变量/类 ...

    2024-02-01 01:15:05
  • 宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案 出现如下错误:

    宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案 出现如下错误:

    宝塔部署来客电商时,出现“open_basedir restriction in effect”错误解决方案Application/LKT/webapp/_compile

    2024-02-01 01:14:59
  • 国外黑客站点收集

    著名的黑客站点 国外黑客安全 http://www.deadly.org/ 大量关于OpenBSD的资料文档教程 国外黑客安全 http://www.guninski.com/ 安全专家Guninsk...

    2024-02-01 01:14:51