之前做這題目時Officec還是舊版,現在大約都是2007以上版本,副檔名格式都不太一樣,所以從頭解說做法
另外之前只有寫入1D陣列的一列資料,這次改成寫入2D陣列的整頁資料
為方便以後修改程式及提升效率,將整個程式拆成多個SubVI,要修改時只針對特定的SubVI修改即可
如何改變儲存格屬性在這一併解說,但沒必要時不建議這麼做。寫入儲存格屬性相當耗時,會拖垮整個程式效能
還有一個最重要的:若電腦安裝的是Excel 2007,請在指定檔案時,副檔名設定為xlsx。當然副檔名也可指定為xls,程式執行也不會出錯,但是用Excel打開檔案時就會多個討厭的對話視窗,按是就可以正常打開檔案
以下範例程式要寫入資料到Excel,同時改變儲存格的文字顏色及背景顏色,儲存格的顏色資料和資料來源的Table相同
整個程式分成幾個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,判斷是開啟現有檔案或新增檔案,判斷的方法使用錯誤控制。因為開啟現有檔案和新增檔案的存檔方式不同,需要送個信號給後面的SubVI
1.用迴圈用判斷是開啟現有檔案或新增檔案,預設用Invoke Node設定要打開的檔案,這裡使用Path元件來指定檔案路徑和檔名,基本上只要Excel程式可以打開的檔案都可以指定。若找不到檔案會產生錯誤,迴圈下一輪會到新增檔案模式
2.新增檔案不需指定檔案路徑和檔名,但在程式最後就需要指定,在後面存檔部分再解說
3.開啟或新增檔案後同樣用Property Node設定取得Excel程式Sheet(工作表)的控制權
第三個SubVI,設定要寫入或新增的工作表
1.用Invoke Node設定要寫入的工作表。在這裡設定的是工作表的名稱,而不是工作表的順序編號。同時用Boolean元件控制新增工作表的動作,新增工作表後自動指定新工作表為寫入的工作表
2.為了後續處理要將到目前為止的資料轉換成Excel._Worksheet,方法一樣是在Automation Refnum元件上按右鍵,從跳出的選單中選取,再使用Variant To Data元件轉換資料
第四個SubVI,實際寫入資料到儲存格,因為寫入2D陣列的整頁資料,所以這裡用雙迴圈處理
1.到上一步為止已完整取得工作表的所有資料,再來就是指定寫入動作。這裡使用雙迴圈分解資料。數值換算成欄位名稱就使用"數值換算成Excel欄位名稱"那篇文章的程式來改造,換算為完整名稱,同時改造為可任意指定工作表其中一個位置的儲存格開始寫入資料
2.顏色轉換直接使用"LabVIEW和Excel的顏色轉換"那篇文章的程式做成SubVI
3.指定儲存格Range後再來是設定寫入資料,分別是寫入資料、文字顏色、儲存格顏色
第五個SubVI,是儲存檔案
1.若是打開現有檔案的模式,就直接Save以打開的檔名存檔。但新增檔案的模式,因為一開始並沒有指定檔名,使用這個方法就會在Excel預設資料夾以Book1.xlsx為檔名存檔
2.新增檔案的模式要指定檔名存檔就一定要SaveAs另存新檔的方式存檔
最後一個SubVI,是切斷和Excel程式連接
最後看範例程式寫入的結果
範例程式的資料
寫入的Excel檔案
留言列表