close

我知道你終於知道,你知不知道我不知道你知道,只有你自己知道你知道............到底少了什麼部份?


你不說大家都不知道你.....終於知道啥知道.....


你的程式少了什麼部份....你說大家都知道.


幾年前我在處理這個問題時到處都找不到資料,後來在某論壇的前輩回覆文章中找到可能的問題點。本想說測試後若有問題再請教,因為文章中很多細節沒有任何說明,之後就看到了以上的回覆。我連再請教整理資料的興致都沒了,拖到現在才整理當時的資料

 


當時所找到的問題點:


1.讀取的階層不夠深入;Excel檔案的結構階層有哪些?這一點微軟沒有足夠的中文資料可以參考,LabVIEW中文書或網站幾乎都沒有提到要如何讀取Excel檔案儲存格的最深層資料,我這篇文章大概是第一個寫這個問題的


2.Excel只支援指定範圍讀取資料,要讀取儲存格屬性資料只有逐格讀取這個唯一方法


實際程式要怎麼寫?只要將"指定路徑沒有檔案時自動新增Excel檔案及改變儲存格屬性"那篇文章的程式做修改即可使用。同樣沒有必要時不建議讀取儲存格屬性,讀取儲存格屬性相當耗時,會拖垮整個程式效能

 


以下範例程式要讀取"指定路徑沒有檔案時自動新增Excel檔案及改變儲存格屬性"那篇文章程式建立的Excel檔案資料,同時讀取儲存格的文字顏色及背景顏色,在LabVIEW的Table顯示的顏色結果和Excel檔案相同

20131226-01  

 

20131226-02  

 


整個程式分成幾個SubVI,現在由左向右分開解說


第一個SubVI,建立和Excel程式連接的基礎

20131216-04  


1.第1步建立和Excel程式連接的基礎,這裡使用Automation Refnum這個元件來做,把Automation Refnum元件設定為Excel._Application,方法是在Automation Refnum元件上按右鍵,從跳出的選單中選取

20131216-06  


2.第2步用Property Node設定是否要開啟Excel程式來打開檔案,由於我不希望每次執行這程式都會自動打開Excel程式,所以在Visible這裡設定為不開啟Excel程式


3.第3步同樣用Property Node設定取得Excel程式Workbook(活頁簿)的控制權

20131216-05  

 


第二個SubVI,開啟現有檔案

20131226-03  


1.用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名


2.開啟檔案後用Property Node設定取得Excel程式Sheet(工作表)的控制權

20131226-04  

 


第三個SubVI,設定要讀取的工作表

20131226-05  


1.用Invoke Node設定要讀取的工作表。在這裡設定的是工作表的名稱,而不是工作表的順序編號


2.為了後續處理要將到目前為止的資料轉換成Excel._Worksheet,方法一樣是在Automation Refnum元件上按右鍵,從跳出的選單中選取,再使用Variant To Data元件轉換資料

20131226-06  

 


第四個SubVI,實際讀取儲存格資料,因為讀取整頁的資料後是2D陣列,所以這裡用雙迴圈處理

20131226-07  

 

20131226-08  


這裡使用到幾個子SubVI


a.將指定儲存格座標還原成數值

20131226-09  

 

20131226-10  

 

20131226-11  

 

20131226-12  


b.將數值換算成儲存格編號

20131216-16  

 

20131216-17  

 

20131216-18  

 

20131212-01  

 

20131216-19  

 

20131216-20  


c.LabVIEW和Excel的顏色轉換

20131211-02  


先將指定儲存格座標還原成數值,分別設定雙迴圈的執行次數


指定儲存格Range後再來是讀取資料,分別是讀取資料、文字顏色、儲存格顏色

20131226-13  


讀出的資料要再另外分別設定給Table

20131226-14  

 


再來使用Close Reference關閉對工作表的控制權

20131226-15  

 


最後一個SubVI,是切斷和Excel程式連接

20131216-24  

 

20131216-25  

 


最後看範例程式讀取的結果


要讀取的Excel檔案

20131216-27  

 

讀取的結果

20131226-16  

arrow
arrow
    文章標籤
    LabVIEW Excel ActiveX
    全站熱搜

    未出師的小工程師 發表在 痞客邦 留言(1) 人氣()