最近為了要如何用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仍會常駐在背後執行

版主您好 第8步迴圈內那個將欄位號碼自動換算成英文格式,圖片內有一些元件和數字很模糊看不清楚,是否可以提供詳細的放大圖片或是計算公式解說?
已發文回覆
版主您好 有個新問題,若指定的檔案路徑沒有檔案時會出現錯誤,有什麼方法可以在指定的檔案路徑沒有檔案時,自動建立一個新的檔案存檔?我希望可以做到自動建立新檔,而不是預先建立一堆空白檔案等待寫入 另外版主是否可以推薦有哪些書在寫這方面的資料可以參考?
你問有哪些書在寫這方面的資料?老實講幾乎沒有,有也只提到皮毛不值得買。我大部分是參考VB的書在加上自己測試 自動建立新檔是可以做到的,有一些需要注意的事項要處理,等我有空整理好資料再發文解說
第8步迴圈內那個將欄位號碼自動換算成英文格式,圖片內有一些元件和數字很模糊看不清楚,是否可以提供詳細的放大圖片或是計算公式解說 謝謝
關於你的問題可以查看左邊文章列表中"LabVIEW"底下"資料存取 & 資料庫"內的兩篇文章"回覆"CJY"的問題:數值換算成Excel欄位名稱"和"補充資料:數值換算成Excel 2007欄位名稱"
版主你好 在第8個步驟部分 第一個case裡的True 是怎麼寫的呢?
已補充圖片說明,基本上就只是把對應的資料流線條拉過去連接
感謝版主的解答 另外我完整接完之後 程式在執行時出現了問題 在迴圈地方說N必須給數值 但是版主的圖中N並沒有接任何數值 看圖的話 應該是For loop沒錯嗎? 來是我有用錯迴圈了呢?
是For loop沒錯 你這個問題是出在連進For loop的資料線條的狀態,你可以看到左邊連進的線條中只有Data那條線在For loop的邊界點是空心狀態,其餘線條是實心狀態。空心點的狀態時,陣列資料會自動分解一一執行,所以For loop的N就不需再另外設定數值