最近為了要如何用LabVIEW寫入Excel檔案做存檔動作傷透腦筋
一樣不使用NI出的付費Toolkit,完全使用ActiveX來寫。但Excel的存檔比想像中還難,有太多的限制,之前讀檔時可指定範圍方式讀取,但寫入時不支援這一套,目前還是只能用迴圈一格一格寫入資料。幸好這次我的工作用不到一次寫入整個2D陣列資料,而是一次寫入一列,不然執行時的效率慢到可以泡杯咖啡在旁邊等
這次程式的要求:
1.可以指定檔名路徑
2.可以在工作表寫滿時新增新的工作表,Excel的工作表欄位最多才256欄,很快資料就滿了
3.一次只寫入一縱列,可以指定要寫入哪一列
使用之前讀檔的程式修改,已完成可用的程式
前幾個步驟和讀檔時相同:
1.第1步建立和Excel程式連接的基礎,這裡使用Automation Refnum這個元件來做,把Automation Refnum元件設定為Excel._Application,方法是在Automation Refnum元件上按右鍵,從跳出的選單中選取
2.第2步用Property Node設定是否要開啟Excel程式來打開檔案,由於我不希望每次執行這程式都會自動打開Excel程式,所以在Visible這裡設定為不開啟Excel程式。這一步有沒有開啟Excel程式影響到結尾要如何處理,後面的步驟再詳細說明
3.第3步同樣用Property Node設定取得Excel程式Workbook(活頁簿)的控制權
4.第4步用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名,基本上只要Excel程式可以打開的檔案都可以指定
5.第5步同樣用Property Node設定取得Excel程式Sheet(工作表)的控制權
6.第6步用Invoke Node設定要寫入的工作表。在這裡設定的是工作表的名稱,而不是工作表的順序編號。同時用Boolean元件控制新增工作表的動作,新增工作表後自動指定新工作表為寫入的工作表
7.第7步,為了後續處理要將到目前為止的資料轉換成Excel._Worksheet,方法一樣是在Automation Refnum元件上按右鍵,從跳出的選單中選取,再使用Variant To Data元件轉換資料
8.第8步,到上一步為止已完整取得工作表的所有資料,再來就是指定寫入動作。這裡使用迴圈分解資料,Excel的縱列編號是從1開始,程式中這一點要注意。同時把要寫入的欄位號碼改成Excel的格式,Excel的欄位是以英文字母編成,因此程式中先將欄位號碼自動換算成英文格式。換算後的欄位號碼和縱列編號合成字串,再指定給程式,要寫入的資料也是一個個分解再寫入
9.用Invoke Node設定Save存檔,沒有加這個時會跳出視窗問你要不要存檔。然後是關閉Sheet(工作表)的控制權。再用Invoke Node設定Close釋放Excel的控制權,不然Excel仍會常駐在背後執行
留言列表