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、文本:差別器件和文本除了以組合的方式,太單一,如果遺漏了器件,就麻煩了,那麼,我們得檢查一下,它是否有形狀資料。
總結一下就是有兩個方式:組合 和 形狀資料 來區分器件或文本框。
快下班了,有空接着寫完。 以後會從 讀取線 一個一個往下解釋。
作者:EminemJK(山治先生)
出處:https://www.cnblogs.com/EminemJK/
您的支援是對部落客最大的鼓勵👍,感謝您的認真閱讀。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。