国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

信息專業(yè)學生的開發(fā)者思維訓練

2021-12-19 10:08:33陳浩強吳紅燕楊飛謝俊松張海航梁振
電腦知識與技術 2021年32期

陳浩強 吳紅燕 楊飛 謝俊松 張海航 梁振

摘要:該文介紹了以基于Excel的信息篩選導出的VBA程序設計項目為基礎展開針對初學者的編程實踐教學的過程。通過對教學任務的科學分解和演示訓練向程序設計初學者展示了一個項目開發(fā)的思路和流程,對初學者進一步學習和訓練具有積極作用。本文采用的項目開發(fā)者的探索式學習方式區(qū)別于傳統課堂學習場景下的系統性學習方式,對新工科教育的落地、對學生實踐應用開發(fā)能力和創(chuàng)新能力培養(yǎng)有一定的啟發(fā)意義。

關鍵詞:Excel;VBA編程;零基礎編程;探索式學習;開發(fā)者思維

中圖分類號:G424 ? ? ?文獻標識碼:A

文章編號:1009-3044(2021)33-0261-05

The Training of Developer Thinking for Information Majors—Taking the Information Screening Project Based on Excel VBA Programming as an Example

CHEN Hao-qiang1, WU Hong-yan1,YANG Fei1, XIE Jun-song1, ?ZHANG Hai-hang2, LIANG ?Zhen1

(1.Anhui Medical University , Hefei 230032, China; 2.Hefei No.11 Middle School, Hefei 230011, China)

Abstract: This paper introduces the process of programming practice teaching for beginners on the basis of VBA program design project based on Excel.Through the scientific decomposition and demonstration training of teaching tasks, the idea and process of a project development are shown to the beginners of programming, which has a positive effect on the further learning and training of beginners.

It has a certain enlightening significance for the implementation of new engineering education and the cultivation of students' practical application development ability and innovation ability.

Key words: Excel; VBA programming; zero basic programming; exploratory learning; developer thinking

隨著計算機信息處理相關專業(yè)的發(fā)展,應用軟件開發(fā)所需的綜合技能逐漸增強,所要準備的技術儲備也愈加豐富。對于信息工程相關專業(yè)的高校學生而言,應用軟件開發(fā)是非常重要的技能,然而因為各種原因導致學生對軟件開發(fā)具有畏懼心理,不少學生遲遲不愿動手去進行相關的實踐訓練。也有許多學生花費了大量時間去學習、實踐,還是進展緩慢,無法得到較滿意的作品,從而漸漸失去信心和興趣,轉向專注于傳統的課堂知識學習,只求課程高分,回避主流的應用技術實踐開發(fā)活動。沒有主流應用技術的土壤滋潤,新工科教育要求的“能力”和“創(chuàng)新”方面必然有所欠缺,學校和教育工作者又要在其他方面盡可能提供支持,花費更大的代價[1]。

作者在教學一線進行了大量的座談和調研,發(fā)現學生經常習慣性地帶入課課堂教學普遍采用的知識系統學習思維模式,而信息專業(yè)實踐應用方面的開發(fā)工作往往需要根據目標功能就某方面的知識進行針對性深入學習或者探索式學習。這兩種學習指導思想本身是根據目標不同而產生,只是在大多數情況下并不能被清晰區(qū)分,從而導致學生們在應用能力學習方面付出代價較高。這樣的情況下,學生對開發(fā)實踐可能會產生畏懼心理,還有些學生有了課堂學習無用的想法。甚至有些學生為此不愿去工作而選擇進一步考研,希望在研究生階段能夠更加系統地學習相關理論和實踐技能,然后再就業(yè)從事相關工作。

為了讓學生體會到程序設計的開發(fā)者思維與系統學習思維的不同,盡可能讓他們打消對計算機軟件開發(fā)的畏懼感,并體會軟件開發(fā)工作的成就感和樂趣[2]。本文通過對項目式教學的研究,結合多所高校開設的公共計算機應用課程——VisualBasic6.0程序設計,針對剛剛入校的高校學生進行了一次項目教學的嘗試[3]。

項目以對Office的Visual Basic for Applications(本文簡稱“VBA”)開發(fā)為技術基礎,時間大約2學時,功能目標是要在Excel工作簿基礎上實現一個數據篩選處理功能,根據已有的數據篩選形成一個數據集。

1 項目的用戶需求分析

該項目教學的訓練內容設定是為某部門信息管理員提供一個基于Excel的信息篩選導出的應用系統,可以幫助我們解決需要頻繁重復填寫、提交各種格式個人信息的問題。

教學訓練過程中采用思維導圖逐層展開的方式作為輔助,再結合實際環(huán)境下的演示操作,可以讓訓練內容更加有條理、便于學生理解。為了讓學生課后也能回顧和跟練,本教學團隊還對整個教學過程進行屏幕錄像,把視頻文件分享給了學生。

教學訓練的開始是先提出平時工作、學習中常見的重復填表問題,請學生參與討論,分別列舉出可行的解決辦法。然后根據學生們的方案逐個分析其優(yōu)缺點、技術路線和所需要的技術儲備,最后提出較小代價開發(fā)和便于用戶使用的理念并引出VBA編程的方案。

本項目所設定的問題場景下,面對的用戶就是基層信息管理員。用戶擁有自己部門各成員的基本信息,這些數據集中、規(guī)范地保存在一個Excel文件里。因此,訓練的開始就要新建一個Excel文件,按照預設場景中的格式添加虛擬的數據信息以便進一步處理。

2 規(guī)劃解決方案

從原始數據生成最終的結果,需要對數據進行重新組織,那就必須建立一個原始數據和結果數據的對照聯系,用于表示兩種數據形式的關系。比較簡單的一種處理方式,就是直接在當前Excel工作簿里新建2個工作表,其中一個用于保存最終的結果,另一個用于存放臨時的對照表,用于設定要導出的數據項。根據其特點,這兩個工作表可以分別命名為“結果表”“處理表”。

作為原始數據表和結果表的橋梁,處理表里面應該同時能夠體現原始數據表和結果表的字段信息,并讓用戶能靈活地選擇、配置。同時,原始數據表的字段數量應該是多于結果表的,那么,處理表里也無須直接列出結果表的字段名。因此,處理表的結構可以設置為圖3所示的結構。

其中,第1行、第2行來自原始數據表,第1行主要用于標記列的編號,引用數據列的時候更加直觀。第3行用于表示是否選中原始數據表的當前字段。

如果用戶最終所需要的結果字段名和原始數據表的字段名不完全一致,只要內容一致,可以在結果表里面進一步人工調整修改。這樣的設計可以減輕編程任務、簡化處理表的結構,完成最終目標的效率反而會增加,代碼的適應性也會更好。

需要注意的是,現在常用的Excel版本下,普通文檔默認保存的擴展名為xlsx,但是針對編寫了VBA宏代碼的文檔應保存為xlsm格式。這是Office出于對文檔信息安全的設計,可以在一定程度上防止未知代碼的惡意操作。

2.1本項目的目標

本項目的目標大體上可以分為技術學習和功能實現兩個方面。

作為針對零基礎學生的教學,技術學習應該針對項目功能所需要的技術點展開,在介紹完一個技術知識,應該盡可能快地把它應用于項目功能的實現。

由于技術知識的學習主要圍繞項目功能實現所需要的范圍進行,整個學習過程就有非常強的以目標驅動進行探索式學習的特點。

2.2從大目標出發(fā)規(guī)劃小目標

基于軟件開發(fā)的自頂向下、逐步求精原則[4],要把做的工作按功能和相互關系劃分為一個個具體的小目標。小目標的劃定不僅有利于分步驟實現對應的具體功能,還可以幫助學生在項目管理的視角下分析項目、開闊思路。

為了減少開發(fā)難度,可以先手工把原始數據表里的前兩行復制到處理表對應的位置,做好一定的數據的準備。那么第一個目標就是根據處理表里第3行的值判斷用戶選中了哪些數據列(字段)。

目標二:假設上述功能已經實現,就要根據所選中的字段,從原始數據表里復制數據。如果把數據直接放在結果表里,還涉及存放順序、空白列的問題,就會有些復雜。可以先把這些數據放在處理表第4行及以下的部分,可以避免問題的復雜度,還便于對照參考是否復制了正確的數據。

目標三:在數據已經正確存放到處理表對應字段下方的情況下,可以接著把數據再從處理表復制到結果表。

最后就可以在已經完成的工作基礎上,改進、增添功能,讓用戶使用起來更加方便。

3 項目的實施

這部分的策略主要是圍繞目標問題進行分析,通過網絡搜索對應的關鍵詞逐步學習、逐層深入。

在演示和功能實施的過程中,出于訓練的需要,盡可能特意“產生”一些常見錯誤。通過這些小錯誤的發(fā)現、定位、分析、解決,呈現開發(fā)者“調試”代碼的過程,可以讓學生理解并掌握一定的程序調試能力。此外還要盡可能對代碼編寫注釋,這個習慣在言傳身教下對學生的影響也是非常直接的。

3.1目標一的實現——判斷用戶選中了哪些數據列

考慮到零基礎的情況,這部分的功能實現還有必要再分為更細的步驟:先讀取處理表第3行第1列單元格的數據并輸出,然后判斷它是否被選中,再逐個讀取第3行所有的單元格數據并判斷其選中狀態(tài)。

通過搜索“ExcelVBA編程”“ExcelVBA讀寫單元格”、類似的關鍵詞,根據結果頁里的提示進行操作,很快就可以了解到對Excel展開VBA編程的方法、對某個工作表單元格數據的讀取和寫入的方法。讀取到數據后,為了便于查看,還要知道如何查看得到的數據,繼續(xù)搜索“ExcelVBA輸出數據”即可了解到常用的Msgbox對話框輸出功能。

獲取單元格數據有多個方法,這里可以根據搜索結果集的情況,演示即可。

方法一:

Msgbox Range("A2").value '通過對話框輸出讀取到的單元格“A2”的內容

方法二:

MsgboxWorksheets(1).Cells(2, 3)'讀取到從左到右,序號為1的工作表,第2行、第3列的單元格

VBA編程的基本語法遵從VisualBasic程序設計語言(以下簡稱VB語言)的規(guī)則,通過解釋代碼含義根據項目功能所需對VB語言進行簡單梳理并列舉相對簡單的例子演示其基本功能和特點??梢院唵谓榻B:變量、數據類型、賦值語句、注釋、數據輸出、if語句、for語句、函數及其基本應用。

從程序設計循環(huán)結構的特點結合讀寫單元格數據的兩種方法,可以讓學生體會到上述方法二比較適合接下來的編程應用。

3.1.1讀取“處理表”的選中標記數據

可以先實現讀取一個單元格的數據,同時輸出進行觀察,確保讀取的數據和預期一致。

Sub test()

Msgbox Worksheets(2).Cells(3, 1)

End Sub

再連續(xù)讀取多個單元格,為了讓初學者更容易看明白,可以只考慮前5列的數據。這樣簡化問題的策略也是開發(fā)者常采用的方法,可以避免復雜問題帶來的錯誤和思維混亂。

For i = 1 To 5

Msgbox Worksheets(2).Cells(3, i)

Next i

說明:根據VBA編程的特點,這部分代碼應該放在“Subtest()”和“EndSub”之間,本文后續(xù)描述將不再特別說明。

3.1.2判斷讀到的數據是否符合“選中”的條件

根據實際情況,可以先設定假如讀到的數值是1,就認為用戶選定了這一列。先手工把第3行的第1列單元格的內容設置為1,然后編寫代碼:

MsgboxWorkSheets(3).Cells(3,1)=1

觀察運行結果,如果顯示結果為“true”即可判定這部分功能邏輯上成立,可以進一步完善代碼功能。

再引入if語句講解和演示條件判斷的應用邏輯關系:

For i = 1 To 5 '先考慮前5列數據的判斷

If Worksheets(2).Cells(3, i) = 1 Then

Msgbox"第" &3 & "行" i & "列被選中"

Endif

Next i

3.2 目標二的實現——從原始數據表里復制數據

這部分的目標是把用戶選中的數據列(字段)復制到第4行開始的區(qū)域,可以先把原始數據表對應的字段名稱也復制一遍,這樣便于對照排錯。

3.2.1復制部分數據

先假定對第3行、第2列的值進行判斷,假如用戶選中了此列,就應該把原始數據表里第2行、第2列的字段名(列名)復制到處理表的第4行、第2列。

If Worksheets(2).Cells(3,2) = 1 Then

Worksheets(2).Cells(4, 2) = Worksheets(1).Cells(2, 2) '把字段名稱放到數據區(qū)開頭的一行

Endif

那么對于前5列的數據連續(xù)判斷和復制多個字段名就應該寫成:

'這里要實現的是把第3行前5列的內容進行判斷,根據是否為1決定是否復制數據表對應列的字段名。

For i = 1 To 5 ? 'i代表列號,簡單的名稱方便描述和理解

If Worksheets(2).Cells(3,i) = 1 Then

Worksheets(2).Cells(4, 2) = Worksheets(1).Cells(2, 2) '把字段名稱放到處理表

Endif

Next i

接下來就可以把對應字段的數據也復制到“處理表”。同樣,為了簡化問題,可以假定只復制5行數據。

'僅復制前5行(包括字段名)、5列

For j= 1 To 5 'j代表行號

For i = 1 To 5 ? 'i代表列號

If Worksheets(2).Cells(3,i) = 1 Then

Worksheets(2).Cells(j+3, 2) = Worksheets(1).Cells(j+1,i)

Endif

Next i

Nextj

3.2.2復制所有的數據到處理表

為了更加便于自動、準確處理數據,原始數據表里的數據區(qū)域行數、列數通過代碼進行判斷和處理更好。

處理的思路是設定一個規(guī)范的“數據表”:要求“數據表”必須滿足所有行、列的內容都應該是連續(xù)的(無空白的行或者空白列分隔)。尤其是對第一行、第一列,可以規(guī)定其在有效的數據區(qū)域內,不允許設置為空白值,用于確保數據區(qū)域的連續(xù)和代碼判斷數據區(qū)域的方便性。那么,即使后期數據表的數據區(qū)域發(fā)生了變化,在執(zhí)行宏代碼的時候也可以快速判斷行數和列數,不需要再次手動修改代碼。

作為一個特定用途的項目,這樣的設定完全可以作為一個數據表必須滿足的規(guī)范。

那么我們對數據處理的邏輯就是:從左到右順序掃描第一行各個單元格的值,一旦發(fā)現某個單元格內容為空,表明數據區(qū)域的列已經結束。這時可以記錄到當前列為止的列數,作為后續(xù)評判數據區(qū)的依據。從上到下順序掃描第一列一旦發(fā)現某個單元格內容為空,表明數據行已經結束,可以記錄到當前列為止的列數,作為后續(xù)評判數據區(qū)的依據。

到目前為止,由于只學習了一個循環(huán)語句for…next語句,這部分代碼就可以寫為:

For i = 1 To 16384 ?'16384這是一個Excel工作表默認的列數最大值,i代表列數

If Worksheets(1).Cells(2, i) = "" Then '假定數據列是連續(xù)的,字段行空白,數據列結束

lie = i - 1 '工作表1“信息表”總共有l(wèi)ie個列,便于后續(xù)處理

Exit For

End If

Next i

當然,這部分功能更加適合的是do…loop語句,但是作為初學者,for語句更加友好、便于理解。后續(xù)可以安排學生自己學習do…loop結構的循環(huán)語句并把這里的代碼改進、完善。

把這部分功能進行綜合,將得到以下程序代碼:

Sub 信息提取到結果表()

'假定處理表里面的數據都為空白

'獲取原始數據表(工作表1)里面的列數

For i = 1 To 16384

If Worksheets(1).Cells(2, i) = "" Then '假定數據列連續(xù),第一行某字段為空,數據列結束

lie = i - 1 '工作表1“信息表”總共有l(wèi)ie個列,便于后續(xù)處理;lie的值其他代碼公用

Exit For

End If

Next i

'把“信息表”的前兩行的數據移到“處理表”序號用于定位標記

For i = 1 To lie

Worksheets(2).Cells(1, i) = Worksheets(1).Cells(1, i)'復制數據表第1行

Worksheets(2).Cells(2, i) = Worksheets(1).Cells(2, i)'復制數據表第2行

If Worksheets(2).Cells(3, i) = 1 Then

For j = 2 To 1048576 ? ?'Excel工作表默認最多可以有1048576行

If Worksheets(1).Cells(j, 1) = "" Then

'假定各行數據連續(xù)的,空白序號列,數據結束

hang = j - 1 ? ?'存放數據區(qū)域的總行數,后續(xù)代碼可以使用此值

Exit For ? ?'不再繼續(xù)掃描更多的行

Else

Worksheets(2).Cells(j + 2, i) = Worksheets(1).Cells(j, i)

'復制數據到處理表

End If

Next j

End If

Next i

End Sub

程序在第一次執(zhí)行的時候,因為還沒有在處理表的第3行選中任何列,代碼不會復制數據區(qū)域的內容,只是把原始數據表里面的前兩行復制到了處理表里。接下來,在用戶選中特定列后,再次執(zhí)行這段代碼,即可復制相關的數據。

3.3目標三的實現——把數據放入結果表

實現的方法也有很多,比較簡單的是在上述代碼里添加復制數據到結果表的代碼即可。代碼如下:

Worksheets(3).Cells(j - 1, i) = Worksheets(1).Cells(j, i) ?'復制原始數據表的數據到結果表

所要注意的是,未選中的列是空值,而結果表里的數據應該是連續(xù)的列,可以通過代碼刪除空的列。

For i = lie To 1 Step -1 ? '從數據區(qū)域最右側的一列開始判斷

If Worksheets(3).Cells(1, i).Value = "" Then '第1行為空,表示當前列為空

Worksheets(3).Columns(i).Delete ?'刪除列

End If

Next i

對于初學者而言,這里是一個難點,需要解釋為什么循環(huán)變量從右到左逐列判斷、處理。因為涉及刪除一列的時候,循環(huán)變量從右向左追溯對代碼執(zhí)行沒有影響,而從左往右逐列檢查,空列刪除后循環(huán)變量的變化情況稍微有些復雜,可以以擴展任務的方式布置給學生去思考、觀察和實現。

4 功能實用性擴展

經過上述的演示和講解,學生已經可以理解Excel的VBA編程思路和特點,結合網絡信息檢索完全可以獨立獲取對應功能的核心代碼并應用到項目開發(fā)中。

完成了項目預先設定的基本功能之后,還應該從用戶的實際使用環(huán)境和需求出發(fā)進行功能改進和升級。這一階段主要是多考慮用戶的實際使用環(huán)境,以用戶使用更加便捷、高效為準。

4.1考慮多個數據表的場景

考慮到用戶的實際工作環(huán)境中的原始數據表可能是以多個工作表的形式存放,以上代碼和功能可以在這方面適當升級改進。解決方案的設計原則是便于用戶操作,并且盡可能小幅度調整先前的方案。

為此,可以在處理表的上方新增2行,用于存放當前所有的工作表、讓用戶確定選擇哪一個工作表進行篩選導出。其中,第1行通過VBA代碼自動獲取并填入當前工作簿的所有工作表名稱,用戶在第2行輸入選中標記,通過代碼判斷當前處理過程選中的是哪一個工作表。同時,要規(guī)定一次只允許選擇一個工作表進行字段數的提取。相應地,先前處理表中的相關行功能也要做適當調整,向下推動2行。

獲取當前工作簿里所有工作表的關鍵代碼如下:

for each gzb in Worksheets

k=k+1

cells(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 總結

從功能方面來看:

本項目代碼工作量不大、靈活性高,開發(fā)周期短。項目實施過程中充分考慮了用戶的實際需求和使用便捷性,能夠解決信息聯絡員頻繁進行數據收發(fā)的一般需求。對于更特殊的需求,也可以根據具體情況對相關功能進行調整。

從教學模式上看:

這樣一個零基礎就可以聽得懂、做得到的項目,作為項目教學的案例,既具有一定難度,又有較好的靈活性和可擴充性。

項目實施過程中通過對總目標的層層分解、逐步細化,以零基礎學生的知識背景逐漸展開知識點介紹和功能實施,邏輯清晰、目標明確。不僅可以消除學生對程序設計的畏懼感和神秘感、了解項目開發(fā)的全過程、體驗開發(fā)者思考方式,也可以獨立、快速完成一個實用性較高的作品。此外,項目的改進方案多樣,難度適中,比較有利于學生發(fā)揮想象力、進行拓展訓練。

綜上,本項目對信息學科相關老師、對應用編程感興趣的學生而言都是一個不錯的案例。

參考文獻:

[1] 沈光,洪一明.新工科背景下高校實驗室促進創(chuàng)新人才培養(yǎng)的治理策略[J].實驗室研究與探索,2020,39(8):263-266.

[2] 王迷迷,鄭英,張立珍.“互聯網+”背景下創(chuàng)客項目式教學研究[J].信息系統工程,2020(7):155-156.

[3] 王艷芬.基于項目式教學的安卓開發(fā)公選課改革探索[J].教育教學論壇,2020(33):171-173.

[4] 倪飛舟.Visual Basic程序設計教程[M].北京:中國水利水電出版社,2010:276.

[5] 何振娟,王瑋,劉海,等.Excel中VBA及Word郵件合并功能在批量處理報表中的應用[J].電腦知識與技術,2021,17(6):212-214.

【通聯編輯:唐一東】

收稿日期:2021-07-15

基金項目:安徽醫(yī)科大學2017年校級質量工程項目教學研究項目(2017076);EAST AST長脈沖數據的實時發(fā)布系統研究(2012SQRL265);安徽省高校質量工程項目(2017jyxm1322)

作者簡介:陳浩強(1979—),男,安徽界首人,講師,碩士,主要研究方向為嵌入式系統設計。

桐梓县| 岱山县| 广宗县| 奎屯市| 江津市| 尖扎县| 沙洋县| 抚宁县| 甘泉县| 长丰县| 洛浦县| 长汀县| 盈江县| 余干县| 保康县| 皮山县| 报价| 东海县| 都江堰市| 清徐县| 藁城市| 兴国县| 子长县| 和田市| 沙坪坝区| 甘德县| 平阴县| 且末县| 花垣县| 双桥区| 静乐县| 龙州县| 贵溪市| 旺苍县| 荔浦县| 连南| 溧阳市| 中西区| 正蓝旗| 斗六市| 庆阳市|