信息專業學生開發者思維訓練研究
時間:2022-12-20 09:25:05
導語:信息專業學生開發者思維訓練研究一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
摘要:該文介紹了以基于Excel的信息篩選導出的VBA程序設計項目為基礎展開針對初學者的編程實踐教學的過程。通過對教學任務的科學分解和演示訓練向程序設計初學者展示了一個項目開發的思路和流程,對初學者進一步學習和訓練具有積極作用。本文采用的項目開發者的探索式學習方式區別于傳統課堂學習場景下的系統性學習方式,對新工科教育的落地、對學生實踐應用開發能力和創新能力培養有一定的啟發意義。
關鍵詞:Excel;VBA編程;零基礎編程;探索式學習;開發者思維
隨著計算機信息處理相關專業的發展,應用軟件開發所需的綜合技能逐漸增強,所要準備的技術儲備也愈加豐富。對于信息工程相關專業的高校學生而言,應用軟件開發是非常重要的技能,然而因為各種原因導致學生對軟件開發具有畏懼心理,不少學生遲遲不愿動手去進行相關的實踐訓練。也有許多學生花費了大量時間去學習、實踐,還是進展緩慢,無法得到較滿意的作品,從而漸漸失去信心和興趣,轉向專注于傳統的課堂知識學習,只求課程高分,回避主流的應用技術實踐開發活動。沒有主流應用技術的土壤滋潤,新工科教育要求的“能力”和“創新”方面必然有所欠缺,學校和教育工作者又要在其他方面盡可能提供支持,花費更大的代價[1]。作者在教學一線進行了大量的座談和調研,發現學生經常習慣性地帶入課課堂教學普遍采用的知識系統學習思維模式,而信息專業實踐應用方面的開發工作往往需要根據目標功能就某方面的知識進行針對性深入學習或者探索式學習。這兩種學習指導思想本身是根據目標不同而產生,只是在大多數情況下并不能被清晰區分,從而導致學生們在應用能力學習方面付出代價較高。這樣的情況下,學生對開發實踐可能會產生畏懼心理,還有些學生有了課堂學習無用的想法。甚至有些學生為此不愿去工作而選擇進一步考研,希望在研究生階段能夠更加系統地學習相關理論和實踐技能,然后再就業從事相關工作。為了讓學生體會到程序設計的開發者思維與系統學習思維的不同,盡可能讓他們打消對計算機軟件開發的畏懼感,并體會軟件開發工作的成就感和樂趣[2]。本文通過對項目式教學的研究,結合多所高校開設的公共計算機應用課程——Visual⁃Basic6.0程序設計,針對剛剛入校的高校學生進行了一次項目教學的嘗試[3]。項目以對Office的VisualBasicforApplications(本文簡稱“VBA”)開發為技術基礎,時間大約2學時,功能目標是要在Ex⁃cel工作簿基礎上實現一個數據篩選處理功能,根據已有的數據篩選形成一個數據集。
1項目的用戶需求分析
該項目教學的訓練內容設定是為某部門信息管理員提供一個基于Excel的信息篩選導出的應用系統,可以幫助我們解決需要頻繁重復填寫、提交各種格式個人信息的問題。教學訓練過程中采用思維導圖逐層展開的方式作為輔助,再結合實際環境下的演示操作,可以讓訓練內容更加有條理、便于學生理解。為了讓學生課后也能回顧和跟練,本教學團隊還對整個教學過程進行屏幕錄像,把視頻文件分享給了學生。教學訓練的開始是先提出平時工作、學習中常見的重復填表問題,請學生參與討論,分別列舉出可行的解決辦法。然后根據學生們的方案逐個分析其優缺點、技術路線和所需要的技術儲備,最后提出較小代價開發和便于用戶使用的理念并引出VBA編程的方案。本項目所設定的問題場景下,面對的用戶就是基層信息管理員。用戶擁有自己部門各成員的基本信息,這些數據集中、規范地保存在一個Excel文件里。因此,訓練的開始就要新建一個Excel文件,按照預設場景中的格式添加虛擬的數據信息以便進一步處理。
2規劃解決方案
從原始數據生成最終的結果,需要對數據進行重新組織,那就必須建立一個原始數據和結果數據的對照聯系,用于表示兩種數據形式的關系。比較簡單的一種處理方式,就是直接在當前Excel工作簿里新建2個工作表,其中一個用于保存最終的結果,另一個用于存放臨時的對照表,用于設定要導出的數據項。根據其特點,這兩個工作表可以分別命名為“結果表”“處理表”。作為原始數據表和結果表的橋梁,處理表里面應該同時能夠體現原始數據表和結果表的字段信息,并讓用戶能靈活地選擇、配置。同時,原始數據表的字段數量應該是多于結果表的,那么,處理表里也無須直接列出結果表的字段名。因此,處理表的結構可以設置為圖3所示的結構。其中,第1行、第2行來自原始數據表,第1行主要用于標記列的編號,引用數據列的時候更加直觀。第3行用于表示是否選中原始數據表的當前字段。如果用戶最終所需要的結果字段名和原始數據表的字段名不完全一致,只要內容一致,可以在結果表里面進一步人工調整修改。這樣的設計可以減輕編程任務、簡化處理表的結構,完成最終目標的效率反而會增加,代碼的適應性也會更好。需要注意的是,現在常用的Excel版本下,普通文檔默認保存的擴展名為xlsx,但是針對編寫了VBA宏代碼的文檔應保存為xlsm格式。這是Office出于對文檔信息安全的設計,可以在一定程度上防止未知代碼的惡意操作。
2.1本項目的目標
本項目的目標大體上可以分為技術學習和功能實現兩個方面。作為針對零基礎學生的教學,技術學習應該針對項目功能所需要的技術點展開,在介紹完一個技術知識,應該盡可能快地把它應用于項目功能的實現。由于技術知識的學習主要圍繞項目功能實現所需要的范圍進行,整個學習過程就有非常強的以目標驅動進行探索式學習的特點。
2.2從大目標出發規劃小目標
基于軟件開發的自頂向下、逐步求精原則[4],要把做的工作按功能和相互關系劃分為一個個具體的小目標。小目標的劃定不僅有利于分步驟實現對應的具體功能,還可以幫助學生在項目管理的視角下分析項目、開闊思路。為了減少開發難度,可以先手工把原始數據表里的前兩行復制到處理表對應的位置,做好一定的數據的準備。那么第一個目標就是根據處理表里第3行的值判斷用戶選中了哪些數據列(字段)。目標二:假設上述功能已經實現,就要根據所選中的字段,從原始數據表里復制數據。如果把數據直接放在結果表里,還涉及存放順序、空白列的問題,就會有些復雜??梢韵劝堰@些數據放在處理表第4行及以下的部分,可以避免問題的復雜度,還便于對照參考是否復制了正確的數據。目標三:在數據已經正確存放到處理表對應字段下方的情況下,可以接著把數據再從處理表復制到結果表。最后就可以在已經完成的工作基礎上,改進、增添功能,讓用戶使用起來更加方便。
3項目的實施
這部分的策略主要是圍繞目標問題進行分析,通過網絡搜索對應的關鍵詞逐步學習、逐層深入。在演示和功能實施的過程中,出于訓練的需要,盡可能特意“產生”一些常見錯誤。通過這些小錯誤的發現、定位、分析、解決,呈現開發者“調試”代碼的過程,可以讓學生理解并掌握一定的程序調試能力。此外還要盡可能對代碼編寫注釋,這個習慣在言傳身教下對學生的影響也是非常直接的。
3.1目標一的實現——判斷用戶選中了哪些數據列
考慮到零基礎的情況,這部分的功能實現還有必要再分為更細的步驟:先讀取處理表第3行第1列單元格的數據并輸出,然后判斷它是否被選中,再逐個讀取第3行所有的單元格數據并判斷其選中狀態。通過搜索“ExcelVBA編程”“ExcelVBA讀寫單元格”、類似的關鍵詞,根據結果頁里的提示進行操作,很快就可以了解到對Excel展開VBA編程的方法、對某個工作表單元格數據的讀取和寫入的方法。讀取到數據后,為了便于查看,還要知道如何查看得到的數據,繼續搜索“ExcelVBA輸出數據”即可了解到常用的Msgbox對話框輸出功能。獲取單元格數據有多個方法,這里可以根據搜索結果集的情況,演示即可。方法一:MsgboxRange("A2").value'通過對話框輸出讀取到的單元格“A2”的內容方法二:MsgboxWorksheets(1).Cells(2,3)'讀取到從左到右,序號為1的工作表,第2行、第3列的單元格VBA編程的基本語法遵從VisualBasic程序設計語言(以下簡稱VB語言)的規則,通過解釋代碼含義根據項目功能所需對VB語言進行簡單梳理并列舉相對簡單的例子演示其基本功能和特點??梢院唵谓榻B:變量、數據類型、賦值語句、注釋、數據輸出、if語句、for語句、函數及其基本應用。從程序設計循環結構的特點結合讀寫單元格數據的兩種方法,可以讓學生體會到上述方法二比較適合接下來的編程應用。3.1.1讀取“處理表”的選中標記數據可以先實現讀取一個單元格的數據,同時輸出進行觀察,確保讀取的數據和預期一致。Subtest()MsgboxWorksheets(2).Cells(3,1)EndSub再連續讀取多個單元格,為了讓初學者更容易看明白,可以只考慮前5列的數據。這樣簡化問題的策略也是開發者常采用的方法,可以避免復雜問題帶來的錯誤和思維混亂。Fori=1To5MsgboxWorksheets(2).Cells(3,i)Nexti說明:根據VBA編程的特點,這部分代碼應該放在“Subtest()”和“EndSub”之間,本文后續描述將不再特別說明。3.1.2判斷讀到的數據是否符合“選中”的條件根據實際情況,可以先設定假如讀到的數值是1,就認為用戶選定了這一列。先手工把第3行的第1列單元格的內容設置為1,然后編寫代碼:MsgboxWorkSheets(3).Cells(3,1)=1觀察運行結果,如果顯示結果為“true”即可判定這部分功能邏輯上成立,可以進一步完善代碼功能。再引入if語句講解和演示條件判斷的應用邏輯關系:Fori=1To5'先考慮前5列數據的判斷IfWorksheets(2).Cells(3,i)=1ThenMsgbox"第"&3&"行"i&"列被選中"EndifNexti
3.2目標二的實現——從原始數據表里復制數據
這部分的目標是把用戶選中的數據列(字段)復制到第4行開始的區域,可以先把原始數據表對應的字段名稱也復制一遍,這樣便于對照排錯。3.2.1復制部分數據先假定對第3行、第2列的值進行判斷,假如用戶選中了此列,就應該把原始數據表里第2行、第2列的字段名(列名)復制到處理表的第4行、第2列。IfWorksheets(2).Cells(3,2)=1ThenWorksheets(2).Cells(4,2)=Worksheets(1).Cells(2,2)'把字段名稱放到數據區開頭的一行Endif那么對于前5列的數據連續判斷和復制多個字段名就應該寫成:'這里要實現的是把第3行前5列的內容進行判斷,根據是否為1決定是否復制數據表對應列的字段名。Fori=1To5'i代表列號,簡單的名稱方便描述和理解IfWorksheets(2).Cells(3,i)=1ThenWorksheets(2).Cells(4,2)=Worksheets(1).Cells(2,2)'把字段名稱放到處理表EndifNexti接下來就可以把對應字段的數據也復制到“處理表”。同樣,為了簡化問題,可以假定只復制5行數據。'僅復制前5行(包括字段名)、5列Forj=1To5'j代表行號Fori=1To5'i代表列號IfWorksheets(2).Cells(3,i)=1ThenWorksheets(2).Cells(j+3,2)=Worksheets(1).Cells(j+1,i)EndifNextiNextj3.2.2復制所有的數據到處理表為了更加便于自動、準確處理數據,原始數據表里的數據區域行數、列數通過代碼進行判斷和處理更好。處理的思路是設定一個規范的“數據表”:要求“數據表”必須滿足所有行、列的內容都應該是連續的(無空白的行或者空白列分隔)。尤其是對第一行、第一列,可以規定其在有效的數據區域內,不允許設置為空白值,用于確保數據區域的連續和代碼判斷數據區域的方便性。那么,即使后期數據表的數據區域發生了變化,在執行宏代碼的時候也可以快速判斷行數和列數,不需要再次手動修改代碼。作為一個特定用途的項目,這樣的設定完全可以作為一個數據表必須滿足的規范。那么我們對數據處理的邏輯就是:從左到右順序掃描第一行各個單元格的值,一旦發現某個單元格內容為空,表明數據區域的列已經結束。這時可以記錄到當前列為止的列數,作為后續評判數據區的依據。從上到下順序掃描第一列一旦發現某個單元格內容為空,表明數據行已經結束,可以記錄到當前列為止的列數,作為后續評判數據區的依據。到目前為止,由于只學習了一個循環語句for…next語句,這部分代碼就可以寫為:Fori=1To16384'16384這是一個Excel工作表默認的列數最大值,i代表列數IfWorksheets(1).Cells(2,i)=""Then'假定數據列是連續的,字段行空白,數據列結束lie=i-1'工作表1“信息表”總共有lie個列,便于后續處理ExitForEndIfNexti當然,這部分功能更加適合的是do…loop語句,但是作為初學者,for語句更加友好、便于理解。后續可以安排學生自己學習do…loop結構的循環語句并把這里的代碼改進、完善。把這部分功能進行綜合,將得到以下程序代碼:Sub信息提取到結果表()'假定處理表里面的數據都為空白'獲取原始數據表(工作表1)里面的列數Fori=1To16384IfWorksheets(1).Cells(2,i)=""Then'假定數據列連續,第一行某字段為空,數據列結束lie=i-1'工作表1“信息表”總共有lie個列,便于后續處理;lie的值其他代碼公用ExitForEndIfNexti'把“信息表”的前兩行的數據移到“處理表”序號用于定位標記Fori=1TolieWorksheets(2).Cells(1,i)=Worksheets(1).Cells(1,i)'復制數據表第1行Worksheets(2).Cells(2,i)=Worksheets(1).Cells(2,i)'復制數據表第2行IfWorksheets(2).Cells(3,i)=1ThenForj=2To1048576'Excel工作表默認最多可以有1048576行IfWorksheets(1).Cells(j,1)=""Then'假定各行數據連續的,空白序號列,數據結束hang=j-1'存放數據區域的總行數,后續代碼可以使用此值ExitFor'不再繼續掃描更多的行ElseWorksheets(2).Cells(j+2,i)=Worksheets(1).Cells(j,i)'復制數據到處理表EndIfNextjEndIfNextiEndSub程序在第一次執行的時候,因為還沒有在處理表的第3行選中任何列,代碼不會復制數據區域的內容,只是把原始數據表里面的前兩行復制到了處理表里。接下來,在用戶選中特定列后,再次執行這段代碼,即可復制相關的數據。
3.3目標三的實現——把數據放入結果表
實現的方法也有很多,比較簡單的是在上述代碼里添加復制數據到結果表的代碼即可。代碼如下:Worksheets(3).Cells(j-1,i)=Worksheets(1).Cells(j,i)'復制原始數據表的數據到結果表所要注意的是,未選中的列是空值,而結果表里的數據應該是連續的列,可以通過代碼刪除空的列。Fori=lieTo1Step-1'從數據區域最右側的一列開始判斷IfWorksheets(3).Cells(1,i).Value=""Then'第1行為空,表示當前列為空Worksheets(3).Columns(i).Delete'刪除列EndIfNexti對于初學者而言,這里是一個難點,需要解釋為什么循環變量從右到左逐列判斷、處理。因為涉及刪除一列的時候,循環變量從右向左追溯對代碼執行沒有影響,而從左往右逐列檢查,空列刪除后循環變量的變化情況稍微有些復雜,可以以擴展任務的方式布置給學生去思考、觀察和實現。
4功能實用性擴展
經過上述的演示和講解,學生已經可以理解Excel的VBA編程思路和特點,結合網絡信息檢索完全可以獨立獲取對應功能的核心代碼并應用到項目開發中。完成了項目預先設定的基本功能之后,還應該從用戶的實際使用環境和需求出發進行功能改進和升級。這一階段主要是多考慮用戶的實際使用環境,以用戶使用更加便捷、高效為準。
4.1考慮多個數據表的場景
考慮到用戶的實際工作環境中的原始數據表可能是以多個工作表的形式存放,以上代碼和功能可以在這方面適當升級改進。解決方案的設計原則是便于用戶操作,并且盡可能小幅度調整先前的方案。為此,可以在處理表的上方新增2行,用于存放當前所有的工作表、讓用戶確定選擇哪一個工作表進行篩選導出。其中,第1行通過VBA代碼自動獲取并填入當前工作簿的所有工作表名稱,用戶在第2行輸入選中標記,通過代碼判斷當前處理過程選中的是哪一個工作表。同時,要規定一次只允許選擇一個工作表進行字段數的提取。相應地,先前處理表中的相關行功能也要做適當調整,向下推動2行。獲取當前工作簿里所有工作表的關鍵代碼如下:foreachgzbinWorksheetsk=k+1cells(1,k)=gzb.name'獲取當前工作簿中所有的工作表名稱放入第1行next因為工作表的增多也帶來順序序號的問題,可以把結果表放在所有工作表的最前面,把處理表作為第2個工作表,相應地需要把上述代碼中涉及工作表序號的部分修改調整。
4.2數據結果存入獨立的文檔
Excel的VBA編程功能強大、靈活,可以實現打開指定的word文檔或Excel工作簿并存入數據,也可以直接新建word文檔或Excel工作簿并存入指定的數據。完全可以根據需要在指定位置輸出一個或多個相關文檔并存入數據,甚至可以設置特定數據的格式、樣式。
4.3結合
Word郵件合并功能既然已經可以根據需要導出所需的數據,那么,以導出數據作為數據源,結合Word的“郵件合并”功能,也可以快速生成多個Word文檔或者直接打印多份指定格式的文稿[5]。4.4添加快捷按鈕和快捷鍵Excel的標簽欄、工具按鈕可以根據需要定制,自己編寫的宏代碼也可以以“按鈕”的方式放在“工具選項卡”或者“快速訪問工具欄”,可以實現“一鍵運行”,用起來更加方便、快捷。
5總結
從功能方面來看:本項目代碼工作量不大、靈活性高,開發周期短。項目實施過程中充分考慮了用戶的實際需求和使用便捷性,能夠解決信息聯絡員頻繁進行數據收發的一般需求。對于更特殊的需求,也可以根據具體情況對相關功能進行調整。從教學模式上看:這樣一個零基礎就可以聽得懂、做得到的項目,作為項目教學的案例,既具有一定難度,又有較好的靈活性和可擴充性。項目實施過程中通過對總目標的層層分解、逐步細化,以零基礎學生的知識背景逐漸展開知識點介紹和功能實施,邏輯清晰、目標明確。不僅可以消除學生對程序設計的畏懼感和神秘感、了解項目開發的全過程、體驗開發者思考方式,也可以獨立、快速完成一個實用性較高的作品。此外,項目的改進方案多樣,難度適中,比較有利于學生發揮想象力、進行拓展訓練。綜上,本項目對信息學科相關老師、對應用編程感興趣的學生而言都是一個不錯的案例。
參考文獻:
[1]沈光,洪一明.新工科背景下高校實驗室促進創新人才培養的治理策略[J].實驗室研究與探索,2020,39(8):263-266.
[2]王迷迷,鄭英,張立珍.“互聯網+”背景下創客項目式教學研究[J].信息系統工程,2020(7):155-156.
[3]王艷芬.基于項目式教學的安卓開發公選課改革探索[J].教育教學論壇,2020(33):171-173.
[4]倪飛舟.VisualBasic程序設計教程[M].北京:中國水利水電出版社,2010:276.
[5]何振娟,王瑋,劉海,等.Excel中VBA及Word郵件合并功能在批量處理報表中的應用[J].電腦知識與技術,2021,17(6):212-214.
作者:陳浩強 吳紅燕 楊飛 謝俊松 張海航 梁振 單位:安徽醫科大學 合肥市第十一中學
- 上一篇:小學古詩文思維訓練路徑
- 下一篇:語文閱讀教學思維訓練方法與策略
精品范文
3信息簡報