天天看點

visio二次開發——圖紙解析

  visio二次開發的案例或者教程,國内真的非常少,這個項目也是花了不少時間來研究visio的相關知識,困難之是以難,是因為我們還沒有了解它,等我們理清楚之後,就會恍然大悟“噢,原來是這麼一回事”,但是這過程是痛并快樂着,哈哈。

  研究這個不是閑來無事,項目需要。老大也安慰我慢慢研究咯,方法總會有的。就這樣,我慢慢的做下去。

進入主題

  先來個效果圖,不然不是大家想要的就浪費大家開發時間了,時間是寶貴的。(也單純是我個人研究結果,如有什麼偏差有錯了解,大家積極指出,一起進步)

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/

您的支援是對部落客最大的鼓勵👍,感謝您的認真閱讀。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

visio二次開發——圖紙解析