visio二次開發的案例或者教程,國內真的非常少,這個項目也是花了不少時間來研究visio的相關知識,困難之所以難,是因為我們還沒有了解它,等我們理清楚之后,就會恍然大悟“噢,原來是這么一回事”,但是這過程是痛並快樂着,哈哈。
研究這個不是閑來無事,項目需要。老大也安慰我慢慢研究咯,方法總會有的。就這樣,我慢慢的做下去。
進入主題
先來個效果圖,不然不是大家想要的就浪費大家開發時間了,時間是寶貴的。(也單純是我個人研究結果,如有什么偏差有錯理解,大家積極指出,一起進步)
第一個是visio圖紙,不難看出,第二個是解析出來的結果集。
一、visio圖紙的相關知識
涉及到幾個對象: Application、 Document
visio對象:Page、Master、Shape、Cell
類似操作word、Excel一樣,我們需要一個進程來打開這個文件,visio對象的大致關系:一個文件就對應一個Document對象,一個Document有多個Page(visio頁),一個Page有多個Shape(形狀),一個Shape又有多個Cell。
二、讀取visio元素(器件)
首先得明白,讀取visio是從圖上哪個元素開始的,畫圖的順序決定了讀取的順序,怎么看呢?
可以生成xml文件來查看,生成XML文件的方法(另存為——web頁(*.html)),在生成的文檔中,找到“data.xml” 這個文件,文本查看就可以了,我們主要操作的,是<Pages>~</Pages>之間的元素,但是這僅僅不能滿足的,有些屬性里面是沒有的,比如形狀數據、文字顏色、圖形背景色等等,這個就需要從Cell里面讀取。生成data.xml文件只是幫助我們分析visio的格式。
選中元素(器件),右鍵-顯示Shapesheet 來查看元素(器件)的信息,比如背景色、字體、字號…… 比較多,只需找到我們需要的屬性就行了。
還有一個是形狀數據,右鍵-數據-形狀數據 彈出形狀數據窗口,一般存儲一些器件屬性,這個用的應該也比較多,因為老是標記在圖上也是亂糟糟的,寫在形狀數據里面可以隱藏起來,單獨的屬性。
讀取visio的主要代碼:
foreach (Page page in Doc.Pages) { foreach (Shape sp in page.Shapes) { if(sp.Connects.Count>0) {}//讀取線 else{ if(sp.Shapes.Count>0) {} //組合,即元素 else //剩下的就是文本啦 { } } } }
首先得解釋一下,為什么這分類,線就不用解釋了,主要是器件和文本框怎么識別,因為肉眼看肯定是知道的,但是計算機不知道呀,總之就是為了識別出來!我門自己定規則:
1、器件:一個器件必須以組合的方式,不論它是和文本組合在一起或者和其他元素組合在一起,總之以組合的方式來畫圖,這就得跟畫圖的同事協調一下了(操作:右鍵圖形-組合)
2、文本:區別器件和文本除了以組合的方式,太單一,如果遺漏了器件,就麻煩了,那么,我們得檢查一下,它是否有形狀數據。
總結一下就是有兩個方式:組合 和 形狀數據 來區分器件或文本框。
快下班了,有空接着寫完。 以后會從 讀取線 一個一個往下解釋。