Visual Basic .Net (VB.Net) 程式語言案例學習 (08. 研討會簡報產生器)
Visual Basic .Net (VB.Net) 程式語言案例學習 (08. 研討會簡報產生器)¶
8.1 問題¶
在許多的研討會中,都會請應邀者準備簡報檔,以利研討會的進行,大會基本上會希望採用同樣的格式,讓研討會的簡報看起來有連貫性。這時候就產生了問題,就算將範本寄給應邀者,請應邀者修改並修改或加入自己的內容,但仍舊免不了有意外的發生。因此就有了這個程式的需求,不如制定一個標準格式,依照基本資料自動產生簡報檔,再將簡報檔寄給應邀者,應邀者不用變更格式,繼續增加新的投影片即可,如此一來所有的簡報格式都會是一致的。
8.2 需求¶
表格 8‑1 「研討會簡報產生器」系統目的分析表
| 版本:1.0 | 要做什麼 | 不要做什麼(不要做不代表不會做) |
|---|---|---|
| 能做什麼 | (第一格:必要項目) | (第二格:次要項目) |
| 利用資料庫將基本資料存入。 | 將資料庫升級至SQL Server,透過網路讓使用者建立基本資料。 | |
| 載入基本資料,可透過點選方式將基本資料填入欄位。 | ||
| 可在產生簡報檔之前,修改欄位內容。 | ||
| 可透過欄位內容產生簡報檔。 | ||
| 不能做什麼(不能做代表不需要做) | (第三格:不必要項目) | (第四格:不需要項目) |
| 設計批次產生簡報檔的功能。 | 將程式設計成網頁,利用ASP.NET與VB.NET設計,讓使用者可以在網頁上編輯基本資料,並自行產生簡報檔。 |
表格 8‑2 「研討會簡報產生器」系統目標分析表
| 版本: | 重要 | 不重要 |
|---|---|---|
| 優先 | (重) | (急) |
| 可透過欄位內容產生簡報檔。 | 利用資料庫將基本資料存入。 | |
| 不急迫 | (輕) | (緩) |
| 可在產生簡報檔之前,修改欄位內容。 | 載入基本資料,可透過點選方式將基本資料填入欄位。 |
表格 8‑3 「研討會簡報產生器」系統規格表
| 規格項目 | 規格內容 | 備註 |
|---|---|---|
| 主要功能 | 可透過欄位內容產生簡報檔。 | … |
| 利用資料庫將基本資料存入。 | ||
| 使用介面 | 可在產生簡報檔之前,修改欄位內容。 | … |
| 載入基本資料,可透過點選方式將基本資料填入欄位。 |
8.3 特色¶
特點就是可以透過基本資料,自動產生格式相同的簡報檔,而無需人工製作。
8.4 使用工具¶
| 語言 | 軟體 |
|---|---|
| Visual Basic 2005 | MS Visual Studio 2005 .NET、MS PowerPoint、MS Access |
8.5 系統架構¶
在這裡我們將建立簡報檔的部分,設計成一個類別,這樣有助於往後的重複使用。透過這個類別產生物件,我們就可以很簡單的建立簡報檔。因此本程式的關鍵在於這個類別,而程式介面則是次要的問題。如果要發佈成可單獨執行的程式,則須要配合兩個DLL檔,Microsoft.Office.Interop.PowerPoint.dll與Microsoft.Vbe.Interop.dll,如此一來就可以直接執行。當然還有基本資料庫Member.mdb和簡報範本檔TechRays_Prt.pot,但這些是可以依照您的需求而做替換的,倘若您覺得簡報範本不適合使用,隨時都可以修改或置換。在教學檔案就是直接執行的範例,您可以參考看看。
8.6 程式實作¶
‘所有變數必須宣告才能使用
Option Explicit On
‘加入基本參考
Imports System
Imports System.Windows.Forms
Imports System.Collections.Specialized
‘Form1的類別
Public Class Form1
Inherits System.Windows.Forms.Form
‘宣告簡報檔產生物件
Dim ppt As PPTAutomation
‘產生簡報按鈕被點選事件
Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreate.Click
‘預設所有欄位皆已填滿
Dim filled As Boolean = True
‘檢查姓名欄位
If (txtName.Text).Trim().Length.Equals(0) Then
errorProvider.SetError(txtName, “不能空白。”)
filled = False
End If
‘檢查年齡欄位
If (txtAge.Text.Trim().Length.Equals(0)) Then
errorProvider.SetError(txtAge, “不能空白。”)
filled = False
End If
‘檢查稱呼欄位
If (txtDesignation.Text.Trim().Length.Equals(0)) Then
errorProvider.SetError(txtDesignation, “不能空白。”)
filled = False
End If
‘檢查區域欄位
If (txtPlace.Text.Trim().Length.Equals(0)) Then
errorProvider.SetError(txtPlace, “不能空白。”)
filled = False
End If
‘檢查電子郵件欄位
If (txtEmail.Text.Trim().Length.Equals(0)) Then
errorProvider.SetError(txtEmail, “不能空白。”)
filled = False
End If
‘檢查組織欄位
If (txtCompany.Text.Trim().Length.Equals(0)) Then
errorProvider.SetError(txtCompany, “不能空白。”)
filled = False
End If
‘倘若資料皆已填滿
If (filled = True) Then
‘宣告字串集合
Dim array As StringCollection
‘建立簡報產生物件
ppt = New PPTAutomation
‘建立字串集合物件
array = New StringCollection
‘將文字欄位內容存入字串集合中
array.Insert(0, txtName.Text)
array.Insert(1, txtAge.Text)
array.Insert(2, txtDesignation.Text)
array.Insert(3, txtCompany.Text)
array.Insert(4, txtPlace.Text)
array.Insert(5, txtEmail.Text)
‘呼叫簡報產生器
ppt.CreateFile(array)
End If
End Sub
‘程式初始化載入事件
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
‘宣告並建立資料庫連結物件
Dim objCnn As New OleDb.OleDbConnection
‘宣告資料庫連結字串變數
Dim strCnn As String
‘宣告並建立資料集物件
Dim objDS As New DataSet
‘設定資料庫連結文字
strCnn = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source =” & Application.StartupPath & “\Member.mdb”
objCnn.ConnectionString = strCnn
‘開啟資料庫
objCnn.Open()
‘建立資料表轉接器
Dim objAD As New OleDb.OleDbDataAdapter(“Select * From Member”, objCnn)
‘將資料表填入資料集
objAD.Fill(objDS, “Member”)
‘設定資料顯示表的資料表名稱
DataGridView1.DataMember = “Member”
‘設定資料顯示表的資料來源
DataGridView1.DataSource = objDS
End Sub
‘當資料顯示表的列被選擇時
Private Sub DataGridView1_RowEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.RowEnter
‘由資料表列中載入資料到所屬的欄位
txtName.Text = DataGridView1.Item(1, e.RowIndex).Value
txtAge.Text = DataGridView1.Item(2, e.RowIndex).Value
txtDesignation.Text = DataGridView1.Item(3, e.RowIndex).Value
txtCompany.Text = DataGridView1.Item(4, e.RowIndex).Value
txtPlace.Text = DataGridView1.Item(5, e.RowIndex).Value
txtEmail.Text = DataGridView1.Item(6, e.RowIndex).Value
End Sub
End Class
如圖8-1可見點選上方的基本資料表,就會把該列的資料載入文字欄位中。
圖 8‑1
如圖8-2可見由程式搭配簡報範本檔所自動產生的簡報檔。
圖 8‑2
8.7 修改重點¶
因為產生簡報檔的類別已經完成了,基本上要修改的重點應該是放在架構上,例如:將基本資料升級在SQL Server上,建立網頁,讓使用者可以自行在網頁上建立基本資料,而產生器就可以依照基本資料產生簡報檔。此外,批次產生簡報檔的構想也是很不錯的,如果是大型的研討會,例如:學術年會。就會很需要批次產生簡報檔,而無需人工點選產生按鈕。
8.8 結論¶
其實這支程式是非常的小巧,但卻能夠帶來極大的便利,這是一個好的應用範例。很多應用能夠結合現有的軟體,例如:MS Excel、MS PowerPoint、…等等。都將會是很省時間又有效率的程式,由其MS Office系列使用者廣布全球,幾乎只要是微軟系統就會搭上一套MS Office,而大多數人們也都具備基本的操作能力,因此設計應用程式時,倘若能夠結合到MS Office,您會發現能夠節省許多工夫,而不必為客製化的問題而煩惱,所以基本上現在的商用軟體,大多都能匯出MS Excel、MS Word的檔案,這就是免去過渡客製化的方法之一。
Lai Tai-Yu (賴岱佑)