我知道你終於知道,你知不知道我不知道你知道,只有你自己知道你知道............到底少了什麼部份?
你不說大家都不知道你.....終於知道啥知道.....
你的程式少了什麼部份....你說大家都知道.
幾年前我在處理這個問題時到處都找不到資料,後來在某論壇的前輩回覆文章中找到可能的問題點。本想說測試後若有問題再請教,因為文章中很多細節沒有任何說明,之後就看到了以上的回覆。我連再請教整理資料的興致都沒了,拖到現在才整理當時的資料
當時所找到的問題點:
1.讀取的階層不夠深入;Excel檔案的結構階層有哪些?這一點微軟沒有足夠的中文資料可以參考,LabVIEW中文書或網站幾乎都沒有提到要如何讀取Excel檔案儲存格的最深層資料,我這篇文章大概是第一個寫這個問題的
2.Excel只支援指定範圍讀取資料,要讀取儲存格屬性資料只有逐格讀取這個唯一方法
實際程式要怎麼寫?只要將"指定路徑沒有檔案時自動新增Excel檔案及改變儲存格屬性"那篇文章的程式做修改即可使用。同樣沒有必要時不建議讀取儲存格屬性,讀取儲存格屬性相當耗時,會拖垮整個程式效能
以下範例程式要讀取"指定路徑沒有檔案時自動新增Excel檔案及改變儲存格屬性"那篇文章程式建立的Excel檔案資料,同時讀取儲存格的文字顏色及背景顏色,在LabVIEW的Table顯示的顏色結果和Excel檔案相同
整個程式分成幾個SubVI,現在由左向右分開解說
第一個SubVI,建立和Excel程式連接的基礎
1.第1步建立和Excel程式連接的基礎,這裡使用Automation Refnum這個元件來做,把Automation Refnum元件設定為Excel._Application,方法是在Automation Refnum元件上按右鍵,從跳出的選單中選取
2.第2步用Property Node設定是否要開啟Excel程式來打開檔案,由於我不希望每次執行這程式都會自動打開Excel程式,所以在Visible這裡設定為不開啟Excel程式
3.第3步同樣用Property Node設定取得Excel程式Workbook(活頁簿)的控制權
第二個SubVI,開啟現有檔案
1.用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名
2.開啟檔案後用Property Node設定取得Excel程式Sheet(工作表)的控制權
第三個SubVI,設定要讀取的工作表
1.用Invoke Node設定要讀取的工作表。在這裡設定的是工作表的名稱,而不是工作表的順序編號
2.為了後續處理要將到目前為止的資料轉換成Excel._Worksheet,方法一樣是在Automation Refnum元件上按右鍵,從跳出的選單中選取,再使用Variant To Data元件轉換資料
第四個SubVI,實際讀取儲存格資料,因為讀取整頁的資料後是2D陣列,所以這裡用雙迴圈處理
這裡使用到幾個子SubVI
a.將指定儲存格座標還原成數值
b.將數值換算成儲存格編號
c.LabVIEW和Excel的顏色轉換
先將指定儲存格座標還原成數值,分別設定雙迴圈的執行次數
指定儲存格Range後再來是讀取資料,分別是讀取資料、文字顏色、儲存格顏色
讀出的資料要再另外分別設定給Table
再來使用Close Reference關閉對工作表的控制權
最後一個SubVI,是切斷和Excel程式連接
最後看範例程式讀取的結果
要讀取的Excel檔案
讀取的結果
留言列表