吉林做网站公司,上海建设工程检测行业协会,wordpress公告栏插件,做网站wordpress还是没有做PPT的灵感#xff0c;总结下前段时间做的VISIO好了。网上VISIO的资料那个少啊#xff0c;姐艰辛地做了一个星期啊一个星期#xff0c;中间还夹杂着PMP道德题的高强度训练#xff0c;和各种“不知道为啥那么难#xff0c;为啥怎么做准确率都不高#xff0c;难道…还是没有做PPT的灵感总结下前段时间做的VISIO好了。网上VISIO的资料那个少啊姐艰辛地做了一个星期啊一个星期中间还夹杂着PMP道德题的高强度训练和各种“不知道为啥那么难为啥怎么做准确率都不高难道我道德真的不及格吗”的自我怀疑// 网上本来就很少的资料还带了n多术语作为半个visio小白研究了半天成果如下//visio文件叫document(PMP说没归档的叫file归了档的叫document偷偷地纠结为啥我才刚open都没save之前的visio也叫document……)用来画图的地方叫window放图形的地方叫模具窗口图形当然就叫模具了。//做的是话路线关键路径用红底标出程序太长不利于总结就简写了。//至今没搞懂怎么获取一个动态连接线两端的图形index所以算法改成//1、从数据库获取一个网络路径用最早开始最晚开始时间(ESLS)标出关键路径的节点。算ES的时候可以顺手标X值(图形画在哪里靠(x,y)坐标定位我用固定间隔画)唯一的起点排第一直接后继第二后继的后继们第3……如果发现某点是某X值更大的点的后继则改掉这点的ES值和X值。由于X固定间隔很容易看出来哪些图形是站在同一列的两层循环for从最小的X到最大的Xfor网络路线的DataTable相同X值的图形用固定的Y增量填入不同的Y值。// 2、两个循环找出哪个关键路径上的点的后继也在关键路径上这些点准备用红底标出。//3、开始按(x,y)坐标drop图形如果有红底标记则涂红色顺手将图形的index值放进datatable。drop完图形之后在自己和后继之间drop连接线如果有红底标记则线需要涂红。//--------正文来了---------// 1.打开一个VISIO增加一个application有两种方法MsVisio.InvisibleAppClass VsAppnewMicrosoft.Office.Interop.Visio.InvisibleAppClass(); //VISIO不可见我稀饭用这种MsVisio.Application VisAppnewMicrosoft.Office.Interop.Visio.Application(); //这样定义的VISIO是可见滴就open了之后可以在托盘上找到他MsVisio.DocumentVsDocVsApp.Documents.Open(pathfilename.vsd); //打开VISIO路径由纯路径文件名vsd后缀组成。// 2.停靠模具窗口“UML 活动”(用的是UML活动里的图形因为画的是路线图还要标出关键路径)short flags(short)MsVisio.VisOpenSaveArgs.visOpenDocked;MsVisio.Documents VsDocsVsApp.Documents;MsVisio.Document VsStencilVsDocs.OpenEx(UMLACT_M.VSS,flags);//这个是模具窗口不知道模具窗口名字的话在visio做个宏然后直接ctrl C V 过来就行了。// 3.定义当前页MsVisio.Page VsPageVsApp.ActivePage;//4.定义我用到的4种图形的类型同样不知道名字的画到visio宏ctrlCVMsVisio.Master MasterASVsStencil.Masters.get_ItemU(ActionState); //活动MsVisio.Master MasterBeginVsStencil.Masters.get_ItemU(InitialState); //起点符MsVisio.Master MasterEndVsStencil.Masters.get_ItemU(FinialState); //终止符MsVisio.Master MasterCF VsStencil.Masters.get_ItemU(ControlFlow); //动态连接线//5.画节点MsVisio.Shape sp; //声明某一图形跟int x是同类意思if (如果是活动节点)spVsPage.Drop(MasterAS,X值Y值);sp.Text某string; // 我写的是 名称活动时长时长单位if (如果有红底标记)sp.get_CellsU(FillForegnd).FormulaRGB(255,153,204); //底色用浅红色所以G值和B值都没有为0else if (如果是起点)spVsPage.Drop(MasterBegin,X值,Y值);else //终点spVsPage.Drop(MasterEnd,X值,Y值);// 6.画动态连接线MsVisio.Shape CnnShape;MsVisio.Cell BeginXCell; MsVisio.CellEndXCell; //用来确定连接线连在图形的上下左右不同图形的值还不一样麻烦还是得去CtrlCV visio宏MsVisio.Shape BeginShape; MsVisio.Shape EndShape;//画线if (节点后继非空则需要画线)// 定义连接线从哪个点连到哪个点BeginShapeVsPage.Shapes[BeginId]; //BeginId自己的图形index之前画图形的时候存的图形Index有用了EndShapeVsPage.Shapes[EndId]; //EndId后继的图形indexCnnShapeVsPage.Drop(MasterCF,0,0); //这个时候不用管你的线drop在哪里随便写个xy值就行了if(有红底标记)Cnnshape.get_CellsU(LineColor).FormulaRGB(255,0,0); //红色// 设置连接起点//据推测Shape.get_CellsSRC()中间的数值表示连接在左右前后BeginXCellCnnShape.get_CellsU(BeginX);// 若起始shape是起始符连接点在右边if (BeginXCell.NameU.Contains(InitialState))BeginXCell.GlueTo(VsPage.Shapes[BeginId].get_CellsSRC(7,2,0));// 若起始shape是活动连接点在右else if(BeginShape.NameU.Contains(ActionState))BeginXCell.GlueTo(VsPage.Shapes[BeginId].get_CellsSRC(7,3,0));//设置连接终点EndXCellCnnShape.get_CellsU(EndX);//活动shape连接点在左if(EndShape.NameU.Contains(Action State))EndXCell.GlueTo(VsPage.Shapes[EndId].get_CellsSRC(720));//结束shape连接点在左if(EndShape.NameU.Contains(Final State))EndXCell.GlueTo(VsPage.Shapes[EndId].get_CellsSRC(7,0,0));