2010年10月6日 星期三

Teaching : 利用 Excel VBA 將題庫轉為 Moodle GIFT format

2010年10月6日 星期三
去年利用 Excel 的 VBA 寫了一個 converter_to_2p.xls ,它主要的功能是將各教科書出版社出題光題中的題庫轉為 2P Flash game 的題庫,讓大家可以不用去解析遊戲題庫中的一大堆參數。後來將它再稍微改了一下,變我自己的 Flash games (IRS, teamplay) 的題庫轉換器 converter_to_teamplay.xls ,用起來真的很方便,短短的時間內就可以準備遊戲的題庫。
九月二十三日噗友 一起玩WeDo 邀我到新竹縣當講座,本想,就是分享我的遊戲嘛!沒問題的!就答應了,還讓人家點菜,我出餐。結果最後講題是「Moodle及Flash測驗整合」,這下可糗了,對 Moodle 真的很不熟,自己在 KTS 裡申請了一個 Moodle 虛擬站臺,但是只是想拿來放檔案而已,根本沒好好的研究,但是答應人家了,也只好硬著頭皮加油囉!

其實,如果知道格式,資料利用程式轉來轉去,想變什麼也沒問題,所以當務之急就是把 Moodel 能吃的題庫格式弄清楚, 一起玩WeD 給了我一個方向 "GIFT" format,於是開始 K 底下的資料:
弄懂了 "GIFT" format 以後,遇到的另一個待解決的問題是 Excel如何結果儲存為 UTF-8 的編碼方式。之前的 converter_to_2p.xls 需要的是以 ANSI 編碼方式儲存檔案,而我的 IRS 和 teamplay 雖然需要 UTF-8 編碼方式,但是 Flash Player 似乎也能吃由 converter_to_teamplay.xls 儲存的 unicode (UCS-2 little endian) 編碼方式。但是經過測試,Moodle 就是要用 UTF-8 編碼的題庫,不然所有的中文字通通變成亂碼。這個問題之前在寫 converter_to_teamplay.xls 時也想過,但是後來發現 Flash 可以支援 UCS-2 little endian 編碼,也就沒有進一步的去找解決的方法。
研究了兩天,沒有找到解決方法,雖然將問題拋到河道中,但沒有解決問題,最後還是靠 google 大神找到了答案:
利用文章中的程式碼就可以順利的將輸出內容以 UTF-8 的編碼方式存檔,而且經過測試,可以將輸出的 GIFT format 的題庫檔 import 到 Moodle 中正常顯示。經過修改以後,這支題庫轉換程式:
目前可以將康軒出題光碟匯出的 CVS 格式題庫、翰林出題光碟中的題本檔(.DOC)及南一出題光碟中的題本檔(.DOC) 中的是非題和選擇題轉為 Moodle 可以 import 的 "GIFT" format 。
converter_to_gift.xls 轉換的主要原理是利用 Excel 的 VBA 將 .CSV or .DOC 檔案讀入後,解析出題幹、選項和正確解答以後再依 GIFT format 進行輸出。

因為是使用 Excel 的巨集,而目前大多數的電腦中的 Excel 可能基於安全考量,"安全等級" 設得較高,巨集預設是被關閉的,因此在開啟 converter_to_gift.xls 時要記得先將安全性降低,不然會無法執行檔案裡的 VBA 來進行轉檔。啓用巨集的方法如下:


Office 2000-2003 啟用巨集的方法
  • 點選主選單 [工具]→[巨集]→[安全性]
  • 選取 [安全性層級] 裡的 「中」,這樣,遇到有巨集的檔案會先詢問後才開啟。
點選主選單中的「工具」
點選「巨集」
點選「安全性」
點選「安全性層級」
點選「中」
依上述方法設定好安全性以後,必須把 Excel 先關閉,重新啟動 Excel 以後才會生效。
如果「安全性」設為「中」,打開帶有巨集的檔案就會出現是否啟用的「安全性警告」對話框:

只要我們按一下「啟用巨集」的按鈕後,就可執行相關的程式了。


    Office 2007 用巨集的方法(一)

    Office 2007 以後,「安全性」設定的畫面和之前的版本不同,如果開啟帶有巨集的文件,在左上方會有一列「安全性警告 已經停用巨集」的警語,一旁還有個「選項」的按鈕,讓我們可以按了以後去設定是否啟用巨集。如果確認來檔案來源是安全的,那就可以放心的按下去囉!
    先按「選項」鈕,進入設定「安全性選項」的畫面
    選取「啟用這個內容」的選項後按「確定」

    這個版本設定「安全性選項」啟用巨集以後,立即就生效,不需要重新開啟文件,這樣的操作程序似乎比較合理。


    Office 2007 用巨集的方法(二)

    在 Office 2007 中啟用巨集的另一個方法是在 「Excel 選項」中的「信任中心」裡設定「巨集選項」 

    展開主選單
    點選「Excel 選項」
    點選「信任中心」
    點選「信任中心設定」
    點選「巨集設定」
    點選「停用所有巨集(事先通知)」或是「啟用所有巨集」


    相關文章

    20 則留言:

    1. very good

      Thank you 您辛苦了

      高手總是造福大家 感恩啦

      回覆刪除
    2. 雄老師:請問是否可以分享您的IRS檔案?謝謝!

      回覆刪除
    3. PC工人您好,
      我把 IRS 的檔案打包成 irs.rar

      回覆刪除
    4. 老師:我想請問唷!!excel存檔後變亂碼要怎麼辦?

      回覆刪除
    5. 老師,請問一下,我把康軒的CSV轉下來
      也成功轉好內容了
      可是答案沒有跟上耶~~~

      所有的選項都是~XXX ~XXX ~XXX ~XXX
      都沒有依照題目答案寫 ~XXX =XXX ~XXX ~XXX

      請問是要手動更改嗎?謝謝

      回覆刪除
    6. Speed 您好:
      無論是使用 converter_to_gift.xls 或是較新的 new-converter.xls ,兩支的 VBA 都只能轉「單選擇題」或「是非」題。
      我剛剛用國小四年級的國語試了一下,以下題為例:

      ,,,( )「嘴脣」的「脣」注音為何? ,3,辰 ,蠢 ,脣 ,屯。,,

      可以正常的轉為

      「嘴脣」的「脣」注音為何? {~辰 ~蠢 =脣 ~屯}

      在選項中,三個加了毛毛蟲,正確的那個(第三選項)加了等號。

      方便的話,您可以將 csv 寄給我看看 ( gmail : gsyan888 )

      回覆刪除
    7. 哈哈,搞笑了…
      原來是康軒的答案是用英文的 A B C D
      忘了說了,我是國中部的^_____^

      國小的光碟原來都是用1、2、3、4

      那請問有偵測答案是 ABCD 的巨集嗎?呵呵~
      雖然我用取代的也超快可以辦得到
      不過多一個步驟。

      大師您的這個程式實在是太好用了,幫我解決一大難題,感謝!感謝!

      回覆刪除
    8. Speed 您好:
      converter_to_gift.xls 版本較舊,已沒有繼續維護,您可以試試我更新過的 new-converter.xls

      回覆刪除
    9. 謝謝大師~
      都可以用了,太感謝了^______^

      回覆刪除
    10. 大師,我又來了~~~
      上次用了您的檔案,超好用的
      康軒版的完全沒問題~~~CSV格式配合OpenOffice的Cale處理 UTF8 格式,完全方便好用。

      目前有一個問題是翰林版的題本檔,轉出來前面會有題號

      =================================
      例:
      73.0曾為奴隸,號稱「五羖大夫」的是誰?{=百里奚~孫叔敖~傅說~膠鬲}

      84.0「徵於色,發於聲,而後喻。」這三句的主語有何異同?{~皆同=前二句同~後二句同~皆異}

      ==================================
      會出現題號【73.0】,請問這是正常的嗎?
      還是可以自動讓它消掉

      因為我個人比較懶啦,所以才會問這個問題
      不然其實您的工具已經讓我順利採用線上測驗來教學了,太感謝您了~~~

      回覆刪除
    11. Speed 您好:
      我的 VBA 分析題本時,最重要的是找出選項在哪裡,而它們通常是接在題幹之後。因此,放在最前面的文字,基本上通通視為題幹的一部份,並沒有自動去掉的功能。

      回覆刪除
    12. 感謝,那應該就是翰林出題時本身資料結構就是那樣設計了。

      用取代功能也只多花1分鐘處理而已。

      謝謝大師,你這個程式真的太好用了
      祝您越設計功能越強越便利,謝謝囉^___^

      回覆刪除
    13. 感恩..

      節省了許多時間

      回覆刪除
    14. 豎琴您好:
      很高興知道這個小工具對您有所助益。

      回覆刪除
    15. 老師您好
      我將converter及要轉換的csv檔都放桌面
      使用converter之後
      進行轉換
      一台電腦出現"編譯錯誤,找不到專案或程式"
      另一台電腦是出現在入DLL時發生錯誤
      不知這是什麼問題??
      有方法解決嗎?

      回覆刪除
      回覆
      1. 您好:
        不知您用的是 new-converter.xls 嗎? 另外, Office 的版本為何? 如果能按一下電腦的 PrintScreen 鍵抓一下畫面, 較能找出問題所在。
        方便的話, 請將您要轉的 csv 檔案寄給我, 幫您查查怎麼回事。 gsyan@lsps.tp.edu.tw

        刪除
    16. 老師您好:
      你的轉換程式,真的太棒了。但最近國中理化在上「動態平衡」,會出現很多這種題目
      (  )12. 在2 CrO42-(黃色)+2 H+ Cr2O72-(橘紅色)+H2O的平衡反應中,下列敘述何者正確? 
      (A)達平衡後,[CrO42-]=[Cr2O72-] (B)達平衡後,正反應速率小於逆反應速率 (C)達平衡後,溶液中[CrO42-]:[Cr2O72-]=2:1 (D)達平衡後,顏色不再變化

      原本有100題,轉成csv檔後只剩34題,有反應式的幾乎都不見了
      康軒南一都一樣。怎麼辦呢?

      回覆刪除
      回覆
      1. 您好:
        我的程式只能就純文字的來解析。據個人的經驗, 反應式可能使用了圖片或是特別的方法產生符號, 這類型的題目, 基本上是轉不出來的。

        刪除
    17. 嗯,瞭解了。謝謝
      反應是的箭頭真的是用「圖片」的方式,所以轉不過去
      我就手動把word的題目,貼到csv檔上,刪掉那些怪東西,留下純文字
      會出現「陣列超出索引範圍」,請問這是什麼意思?
      把我手動完成的csv檔,在分割成幾個小檔案(讓題數變少),有時候就可以轉成功,有時候又會出現「陣列超出索引範圍」。
      所以我猜是我手動貼上的題目可能有不符合你設定的規格,
      有修正的方法嗎?
      謝謝

      回覆刪除
      回覆
      1. 您好:
        「陣列超出索引範圍」錯誤訊息出現的原因有很多,基本上,如您所猜,就是程式解析不出題目。抱歉,對於 VBA 可說是一知半解而已,程式寫得不夠完備,無法提供正確的訊息給您參考,是以也無法給您修正的建議了。

        刪除

     
    雄::gsyan © 2009. Design by Pocket