最近為了要如何用LabVIEW寫入Excel檔案做存檔動作傷透腦筋


一樣不使用NI出的付費Toolkit,完全使用ActiveX來寫。但Excel的存檔比想像中還難,有太多的限制,之前讀檔時可指定範圍方式讀取,但寫入時不支援這一套,目前還是只能用迴圈一格一格寫入資料。幸好這次我的工作用不到一次寫入整個2D陣列資料,而是一次寫入一列,不然執行時的效率慢到可以泡杯咖啡在旁邊等

 

 

這次程式的要求:


1.可以指定檔名路徑


2.可以在工作表寫滿時新增新的工作表,Excel的工作表欄位最多才256欄,很快資料就滿了


3.一次只寫入一縱列,可以指定要寫入哪一列

 

 

使用之前讀檔的程式修改,已完成可用的程式

20080329-05  

 

 

前幾個步驟和讀檔時相同:

 


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(工作表)的控制權

20080329-01  

 

 

6.第6步用Invoke Node設定要寫入的工作表。在這裡設定的是工作表的名稱,而不是工作表的順序編號。同時用Boolean元件控制新增工作表的動作,新增工作表後自動指定新工作表為寫入的工作表

20080329-02  

 

 

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

 

 

8.第8步,到上一步為止已完整取得工作表的所有資料,再來就是指定寫入動作。這裡使用迴圈分解資料,Excel的縱列編號是從1開始,程式中這一點要注意。同時把要寫入的欄位號碼改成Excel的格式,Excel的欄位是以英文字母編成,因此程式中先將欄位號碼自動換算成英文格式。換算後的欄位號碼和縱列編號合成字串,再指定給程式,要寫入的資料也是一個個分解再寫入

20080329-03  

 20150520-01  

 

 

9.用Invoke Node設定Save存檔,沒有加這個時會跳出視窗問你要不要存檔。然後是關閉Sheet(工作表)的控制權。再用Invoke Node設定Close釋放Excel的控制權,不然Excel仍會常駐在背後執行

20080329-04  

, ,

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


留言列表 (5)

發表留言
  • CJY
  • 版主您好

    第8步迴圈內那個將欄位號碼自動換算成英文格式,圖片內有一些元件和數字很模糊看不清楚,是否可以提供詳細的放大圖片或是計算公式解說?
  • 已發文回覆

    未出師的小工程師 於 2013/12/12 15:35 回覆

  • CJY
  • 版主您好

    有個新問題,若指定的檔案路徑沒有檔案時會出現錯誤,有什麼方法可以在指定的檔案路徑沒有檔案時,自動建立一個新的檔案存檔?我希望可以做到自動建立新檔,而不是預先建立一堆空白檔案等待寫入

    另外版主是否可以推薦有哪些書在寫這方面的資料可以參考?
  • 你問有哪些書在寫這方面的資料?老實講幾乎沒有,有也只提到皮毛不值得買。我大部分是參考VB的書在加上自己測試

    自動建立新檔是可以做到的,有一些需要注意的事項要處理,等我有空整理好資料再發文解說

    未出師的小工程師 於 2013/12/13 17:25 回覆

  • 英祺
  • 第8步迴圈內那個將欄位號碼自動換算成英文格式,圖片內有一些元件和數字很模糊看不清楚,是否可以提供詳細的放大圖片或是計算公式解說 謝謝
  • 關於你的問題可以查看左邊文章列表中"LabVIEW"底下"資料存取 & 資料庫"內的兩篇文章"回覆"CJY"的問題:數值換算成Excel欄位名稱"和"補充資料:數值換算成Excel 2007欄位名稱"

    未出師的小工程師 於 2014/07/19 09:06 回覆

  • Alicia
  • 版主你好
    在第8個步驟部分
    第一個case裡的True 是怎麼寫的呢?
  • 已補充圖片說明,基本上就只是把對應的資料流線條拉過去連接

    未出師的小工程師 於 2015/05/20 20:51 回覆

  • Alicia
  • 感謝版主的解答
    另外我完整接完之後 程式在執行時出現了問題
    在迴圈地方說N必須給數值 但是版主的圖中N並沒有接任何數值
    看圖的話 應該是For loop沒錯嗎?
    來是我有用錯迴圈了呢?
  • 是For loop沒錯
    你這個問題是出在連進For loop的資料線條的狀態,你可以看到左邊連進的線條中只有Data那條線在For loop的邊界點是空心狀態,其餘線條是實心狀態。空心點的狀態時,陣列資料會自動分解一一執行,所以For loop的N就不需再另外設定數值

    未出師的小工程師 於 2015/05/26 21:24 回覆

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼