1. 首頁
  2. 自動化技術

利用自動化技術列印excel表格論文

利用自動化技術列印excel表格論文

摘要Microsoft公司的Office辦公軟體中的Excel是一種專業的電子表格處理軟體,Microsoft公司對它的Office軟體系列都提供了對自動化技術的支援,這樣就可以透過其他高階程式語言呼叫Office軟體系列,利用其成熟而可靠的技術與功能來輕鬆實現特定功能。本文中,將透過自動化技術,實現在PowerBuilder中呼叫Excel來實現表格的輸出與列印。

關鍵詞 自動化 Excel PowerBuilder 表格

1 問題的提出

在為某企業設計電子圖文件管理系統中,使用者提出要求,要能夠快速輸出某些電子表格。在未使用自動化技術之前,該企業使用的是AutoCad軟體來一次性將多個表格生成到一個DWG檔案中,然後透過繪圖儀出圖。這種做法的好處在於能夠有效的節省企業的開支,一次性生成大量的表格。但是,缺點也是明顯的:這種做法欠缺靈活性,當遇到只需要輸出少量表格的情況時,做法過於複雜。即這種做法非常適合於大量表格的批次輸出,而不適合個別表格的單獨輸出。正是在這種背景下,我們提出了使用Excel電子表格處理軟體來處理該企業的表格輸出問題。

Excel軟體是專門為處理各式電子表格而設計,它能夠非常高效而專業的處理各式表格,並且非常關鍵的是:它具有表格計算彙總功能,在這一點上,AutoCad軟體是無法相比的。另外一個原因,在當前的企業中,印表機的使用日益普及,列印速度也日益加快,當多個使用者同時需要列印時,可以透過高速的網路印表機來輕鬆實現,在這一點上,使用Excel也具有一定的優勢。

2 自動化技術

Microsoft公司提供的自動化技術,簡單的說,就是將某一個應用程式的功能(可能是一部分)當作一系列的物件來向其他的外部應用程式暴露(Expose),這個外部應用程式就可以使用這些物件,這個過程就被稱為自動化(Automation)。例如,Excel,我們可以將它的大部分功能當作一系列物件來加以暴露,然後在另外的應用程式中使用這些物件,這就是使用自動化物件來呼叫Excel完成指定功能的關鍵所在。

一個應用程式的可訪問物件被稱為物件模型(Object Model),如果能夠使用自動化來操縱一個程式的物件模型就意味著可以重複使用元件。例如,使用自動化,利用Excel中已經編寫和測試好的程式碼來進行復雜的數學運算,這就省去了程式設計師親自動手編寫和除錯複雜程式碼的麻煩。

暴露物件的程式被稱為伺服器(Servers),使用這些物件的程式被稱為客戶(Clients)。在這裡,我們把Excel當作自動化伺服器,把我們的PowerBuilder應用程式當作客戶,這樣就可以透過自動化技術來實現特定的表格生成和列印功能。

在大多數的Office軟體中都包含一個Application物件,Excel也不例外,這個物件是Excel物件模式中的基礎物件,它包含了許許多多的成員(Member),但是在這裡,我們只需要使用到其中的一部分。

3 在PowerBuilder中使用自動化技術

PowerBuider是Sybase公司推出的一種高階資料庫應用程式開發環境,在這個環境中開發資料庫應用程式,使用其專利技術——DataWindow,可以很輕鬆的開發出非常專業的資料庫應用程式。此外,PowerBuilder還支援多種資料庫,能夠很輕鬆的與目前流行的MS SQL Server、Oracle等企業級資料庫建立連線,處理各種事務。

PowerBuilder中的程式語言被稱為指令碼(Script),實際上,使用PowerBuilder編寫的程式也是事件驅動,在介面設計上也完全做到了“所見即所得”,並完全使用面向物件的程式設計思想,它還提供了對OLE、DDE、Automation等技術的支援,下面就來說明如何在PowerBuilder中使用自動化技術。

首先,宣告一個OLE物件,如下:

OLEObject OLE_MyExcel

其次,建立該OLE物件,如下:

OLE_MyExcel =Create OLEObject

然後,使用PowerBuilder中的ConnectToNewObject函式來建立一個新的OLE物件,並且連線到該物件上,如下:

OLE_MyExcel. ConnectToNewObject ("excel.Application")

呼叫該函式時,如果成功的話,返回值是0,否則就意味著呼叫失敗。

到此,自動化的準備工作已經完成,下面是具體的操作過程。

4 處理和打印表格

在呼叫Excel時,首先需要解決的一個問題是是否讓Excel可見,即是否為後臺操作。這個問題可以簡單的透過設定Visible屬性加以控制,如果希望Excel後臺執行,可以簡單的編寫如下語句:

OLE_MyExcel.visible=false

然後是開啟指定的XLS檔案,具體的語句如下:

OLE_MyExcel.Application.Workbooks.Open ("d:excel-example.xls")

要操縱資料列表中的資料單元,就必須對ActiveCell物件進行操縱,該物件是Application物件中一項屬性。將資料輸入到一個數據單元包括兩個步驟:第一是選擇一個數據單元,第二是將資料傳遞給它。選擇一個數據單元透過呼叫Range物件的Select()方法就可以完成,Range物件是用來選擇一個或多個數據單元的。Select()方法需要起始的行數、列數和結束的行數、列數來確定所選擇的資料單元。如果只選擇一個單獨的資料單元,就可以忽略結束的行、列數。當範圍被設定以後,將資料傳遞給ActiveCell物件(引用了被Range物件指定的資料單元)的FormulaR1C1屬性。如下:

OLE_MyExcel.Range("c10").Select()

OLE_MyExcel.ActiveCell.FormulaR1C1 = sle_2.text //Sle_2為一個靜態文字框控制元件

OLE_MyExcel.Range("J10").Select()

……

如果希望得到一系列數值的和,則需要首先使用Select()方法來指定需要求和的Cell的範圍,然後指定存放和的Cell位置,最後呼叫SUM方法即可,如下:

OLE_MyExcel.Range(“A1:D1”).Select()

OLE_MyExcel.Range(“E1”).Activate()

OLE_MyExcel.ActiveCell.FormulaR1C1 = “=SUM(RC[-4]:RC[-1])”

當然還可以進行其他方面的`設定,例如把字型設定為粗體(Bold),則可以編寫如下程式碼:

OLE_MyExcel.Range(“A1:E1”).Select()

OLE_MyExcel.Selection.Font.Bold = True

至於其他的設定可以參考相關書籍。

至於表格的列印,則是簡單的呼叫PrintOut()方法即可,但是需要首先指定列印的範圍,如下是列印名為“Sheet1”的WorkSheet的程式碼:

OLE_MyExcel.Worksheets("sheet1").Activate()

OLE_MyExcel.ActiveSheet.PrintOut()

接下來是關於對XLS檔案進行了改動以後,在關閉該檔案時是否需要向用戶提出警告。這個問題只需要簡單的對OLE_MyExcel.Application.DisplayAlerts屬性進行設定即可,為True時彈出警告框,為False時不彈出警告框,儲存所作的修改。

最後一步,在作完所有工作以後,需要關閉自動化物件,撤銷與自動化伺服器的連線,銷燬OLE物件,因為使用自動化程式,尤其是Word或Excel這樣的Office程式,所消耗的系統資源是很龐大的,因此在每次工作完成之後,需要釋放這部分系統資源。如下:

OLE_MyExcel.Application.quit()

OLE_MyExcel.DisConnectObject()

destroy OLE_MyExcel

5 結束語

在使用了自動化技術以後,完滿的解決了原來的表格處理問題,可以非常方便的對各種表格進行小批次的處理與列印,非常靈活。如果能夠與企業的資料庫結合起來,透過外部程式將資料成批輸入,亦可解決大批次資料輸出的問題,不失為一條好的解決方案。

在實際應用中,透過與企業資料庫相結合,使用此方法自動填寫了包含了大量資料的XLS檔案,並可以透過印表機打印出來.

參考資料

[1]James Foxall 《Teaching yourself Visual Basic .NET in 24 hours》 Sams 11/2001

[2]梁科山,徐曉軍,劉濤 《某企業的PDM系統設計方案書》

[3]PowerBuilder幫助檔案