廣告贊助

之前做這題目時Officec還是舊版,現在大約都是2007以上版本,副檔名格式都不太一樣,所以從頭解說做法


另外之前只有寫入1D陣列的一列資料,這次改成寫入2D陣列的整頁資料


為方便以後修改程式及提升效率,將整個程式拆成多個SubVI,要修改時只針對特定的SubVI修改即可


如何改變儲存格屬性在這一併解說,但沒必要時不建議這麼做。寫入儲存格屬性相當耗時,會拖垮整個程式效能


還有一個最重要的:若電腦安裝的是Excel 2007,請在指定檔案時,副檔名設定為xlsx。當然副檔名也可指定為xls,程式執行也不會出錯,但是用Excel打開檔案時就會多個討厭的對話視窗,按是就可以正常打開檔案

20131216-01  

 


以下範例程式要寫入資料到Excel,同時改變儲存格的文字顏色及背景顏色,儲存格的顏色資料和資料來源的Table相同

20131216-02  

 

20131216-03  

 


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

 


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

20131216-04  

 

20131216-05  


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(活頁簿)的控制權

 


第二個SubVI,判斷是開啟現有檔案或新增檔案,判斷的方法使用錯誤控制。因為開啟現有檔案和新增檔案的存檔方式不同,需要送個信號給後面的SubVI

20131216-07  

 

1.用迴圈用判斷是開啟現有檔案或新增檔案,預設用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名,基本上只要Excel程式可以打開的檔案都可以指定。若找不到檔案會產生錯誤,迴圈下一輪會到新增檔案模式

20131216-08  

 

2.新增檔案不需指定檔案路徑和檔名,但在程式最後就需要指定,在後面存檔部分再解說

20131216-09  


3.開啟或新增檔案後同樣用Property Node設定取得Excel程式Sheet(工作表)的控制權

 


第三個SubVI,設定要寫入或新增的工作表

20131216-10  

 

20131216-11  

 

20131216-12  


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


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

 


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

20131216-13  

 

20131216-14  

 

1.到上一步為止已完整取得工作表的所有資料,再來就是指定寫入動作。這裡使用雙迴圈分解資料。數值換算成欄位名稱就使用"數值換算成Excel欄位名稱"那篇文章的程式來改造,換算為完整名稱,同時改造為可任意指定工作表其中一個位置的儲存格開始寫入資料

20131216-16  

 

20131216-17  

 

20131216-18  

 

20131212-01  

 

20131216-19  

 

20131216-20  


2.顏色轉換直接使用"LabVIEW和Excel的顏色轉換"那篇文章的程式做成SubVI

20131211-02  


3.指定儲存格Range後再來是設定寫入資料,分別是寫入資料、文字顏色、儲存格顏色

20131216-15  

 


第五個SubVI,是儲存檔案

20131216-21  


1.若是打開現有檔案的模式,就直接Save以打開的檔名存檔。但新增檔案的模式,因為一開始並沒有指定檔名,使用這個方法就會在Excel預設資料夾以Book1.xlsx為檔名存檔

20131216-22  


2.新增檔案的模式要指定檔名存檔就一定要SaveAs另存新檔的方式存檔

20131216-23  

 


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

20131216-24  

 

20131216-25  

 


最後看範例程式寫入的結果


範例程式的資料

20131216-26  


寫入的Excel檔案

20131216-27  

文章標籤
創作者介紹

LabVIEW & PLC還未出師的小工程師部落格

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


留言列表 (4)

發表留言
  • CJY
  • 感謝版主回覆,問題已解決了

    現在有個新的問題,我希望在新增檔案時能使用我建立的範本檔,要如何設定?

    範本檔的格式大約是這樣的
    1.最上面第一列是5個儲存格合併跨欄置中的表頭格子,預計要寫入3行資料,分別是檢測項目、檢測日期、檢測人
    2.第二列是5個欄位標題,分別是編號(從1開始)、日期時間、數據1、數據2、數據3
    3.所有的實測資料從第3列開始寫入

    因為第一列的格子是合併儲存格算起來只有1格,後面實際要寫入是二維陣列。寫入資料時要如何處理?是否要分別儲存,先寫個程式專門寫入第一格的表頭,再用另一個程式專門寫入資料?

    若版主對以上說明覺得不夠詳細,我可以寄範本檔案給你

    期待版主的回覆,預祝版主新年快樂
  • 已發文回覆

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

  • 悄悄話
  • Mini
  • 版大你好
    我在第二個Sub vi的Mode 接到第五個Sub vi 裡的case時出現了怪怪的訊息
    他不能讀到裡面的Open和Add
    我看了一下我第二個Sub vi 在接Enum Constant時有出現紅色小三角形
    不知道是不是這邊出問題
  • 出現紅色小三角形表示兩邊的資料不相等,你要看Sub vi內的Enum內容格式是否相同

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

  • Alicia
  • 版主大大你好
    不好意思 我有個小問題想請教
    寫入Excel 可以只要指定在某一格儲存格嗎?
  • 可以只指定單一儲存格寫入資料,只要按照標準欄位格式設定即可
    通常會指定特定儲存格寫入,大多是建立檔案時使用範本檔,才會指定範本中特定儲存格

    未出師的小工程師 於 2015/06/01 20:29 回覆

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

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

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

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

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼