2010年5月24日

如何善用 Word & Notepad++ 巨集來完成需重複執行的檔案編寫動作

上個週末打開一個影片檔,發現字幕檔是中英文混合的,造成字幕吃掉畫面很大的空間,
打開字幕檔一看,果然每一段時間都有先英文後中文的字幕:
















因此我想要自己作成「只有中文」&「只有英文」兩個字幕檔,但這個檔案有6418 行,如果要手動一行一行的刪除 (而且要作兩次,第一次先刪除全部的中文,第二次刪除全部的英文),顯然會作到瘋掉,經過一些嘗試,我發現有以下幾個辦法可以讓現成的軟體幫我完成這個工作:
  • Word 2007 (其他版本應該也可以) 的巨集
  • Notepad ++ 的巨集
以下分別說明。
如何使用 Word 2007 的巨集
1.點選 Word 左上角的 Office Logo,進入「Word 選項」:
3
2.在「常用」類別中,勾選「在功能區顯示 [開發人員] 索引標籤」
2
3.打開影片的字幕檔 (.srt),記得在「檔案類型」選擇「所有檔案 (*.*)」
4
4.打開檔案後,先把游標移到我要刪除的第一行,然後先把這行刪除掉
6
5.接下來,點選「開發人員」索引標籤,再點選「錄製巨集」
5
6.接下來就是巨集的內容,也就是你要重複不斷執行的一系列動作,我的動作是:
  • 把游標往下移 5 行
  • 按住 shift + end 選取整行(此時會包含換行符號)
  • (shift 鍵不要放開)按「左方向鍵」,以取消選取換行符號
  • 按 Delete 刪除該行
6
7.做完以上動作後,點選「開發人員」索引標籤中的「停止錄製」按鈕,這樣巨集就大功告成啦!
7
8.點選「開發人員」索引標籤中的「Visual Basic」,此時會開啟 Microsoft Visual Basic IDE
9.此時可看到剛剛錄製的巨集,接下來可用以下兩種方法來執行整份文件的取代
  • 把巨集內容改寫為一個無窮迴圈:適用於整份文件的排版、格式都固定,確定重複執行不會出錯時
  • 把 Word 主視窗和 Microsoft Visual Basic 視窗並列顯示,手動重複點選綠色三角形按鈕,以手動執行一次游標所在的 Sub:適用於不確定整份文件的排版、格式是否都一致,或者想要一一確認欲執行的修改時
9
上述的步驟 6 中所執行的一系列動作,若是利用 Word 內建的「按 F4 重新執行剛剛執行的動作」是沒有用的 (只會重複幫你執行「按 Delete」這個動作),必須要以錄製巨集的方式,告訴 word 你要重複執行的動作究竟是哪些。(也可以把欲重複執行的動作設定為「先刪除游標所在的該行,再把游標往下移 5 行」)

如何使用 Notepad ++ 的巨集

利用 Word 麻煩的地方在於:
  • Word 是要版權的 (而且 Word 比較吃資源,啟動時間也比較慢)
  • 在 Word 裡面按「shift + end」會選取到換行符號,不小心會多刪除掉一行,不利於一系列的動作重複執行
有個更好的替代方案是使用有名的開源碼編輯器:Notepad++ (還有 Notepad ++ Portable 可以選擇)。Notepad++ 一樣有句集 (macro) 功能,接下來就看看如何使用吧!
1.打開字幕檔 (.srt)
2.打開檔案後,先把游標移到我要刪除的第一行,然後先把這行刪除掉
3.從「Macro」選單執行「Start Recording」功能,接下來的動作跟在 Word 中錄製巨集一模一樣,差別在於,以「shift+end」選取整行後,不會選取到換行符號!所以就不用作「(shift 鍵不要放開)按「左方向鍵」,以取消選取換行符號」這麼麻煩的事情了。




















或者按紅色的錄音按鈕開始錄製巨集:
11

4.錄製完畢後,點選「Macro」選單的「Stop Recording」功能,以停止錄製巨集:













或者按黑色的按鈕以停止錄製巨集:
13

5.從「Macro」選單中可以看到,「Playback」(也就是播放巨集)的快捷鍵是「Ctrl+Shift+P」,因此接下來只要按住「Ctrl+Shift+P」不放,Notepad++ 就會自動把整份文件給處理完了。(要注意,若有安裝 PicPick,此快捷鍵會起動 PicPick 的白板功能,只要先把常駐的 PicPick 關閉即可)













或者按藍色三角型按鈕來播放剛剛錄製好的巨集:





如果這個巨集日後會常常需要使用的話,也可以利用「Macro」選單中的「Save Current Recorded Macro…」功能來儲存剛剛錄製好的巨集。

雖然 Word 提供的強大的 VBA 編寫環境,但是對於這類簡單的應用來說,我覺得 Notepad++ 更為輕巧好用,內建的巨集功能相當好用,也不用擔心版權的問題。

(另外發現一個小技巧,用 PicPick 擷取矩形區域時,且要完整保留左上角的 logo / 文字,最好從右下角開始往左上角圈選,會比較順。)

成果:
利用 Notepad++ 的 Compare 功能可以看出,處理前的字幕檔(左)同時有中英文字幕,處理後的字幕檔(右)只剩下英文字幕,要製作全中文的字幕也是如法炮製。




後記:
最近也在幾個介紹好用軟體的有名部落格上看到一些可錄製鍵盤、滑鼠的操作,而後重複播放的軟體,例如:
但是經過測試,這兩套軟體無法正確紀錄「shift + end 選取整行」的動作,只能紀錄到「按 Delete 鍵」這個動作,因此當重複播放錄製完畢的一系列動作時,會發現程式只能自動重複幫我執行「按 Delete 鍵」這個動作而已,不知道是否是我錄製的方法不對,如果各位網友有試出正確的作法,歡迎一起討論 :D

6 則留言:

坎尼 提到...

picpick 可以用 "擷取視窗控制項" 的功能,直接把選中的作業視窗抓圖 (要按 print 鍵)

Unknown 提到...

呃 .. 那和 alt + printscreen 有啥差異?

坎尼 提到...

大概是少做一個 ctrl + v 的動作吧...

Unknown 提到...

不會啦,讓 PicPick 常駐的話,按 alt + printscreen 以後,會自動把抓到的圖用 PicPick 的影像編輯器打開~

坎尼 提到...

其實 "擷取視窗控制項" 還可以抓到應用程式裡的特定控制項視窗,其實應該比 alt + printscreen 好用許多啦

匿名 提到...

請問一下如何用別人已製作好的marcos呢?
副檔名為eng.jsee

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D