顯示具有 word 標籤的文章。 顯示所有文章
顯示具有 word 標籤的文章。 顯示所有文章

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

2009年4月5日

如何快速取出內嵌於 Microsoft Word 檔的大量圖片

上個週末老爸問我一個問題:要怎樣把 word 裡面的圖片抓下來?
 
我想這是很簡單的問題嘛,所以我就叫他在 word 裡面點選那張圖, 然後用右鍵選單的「複製」或者按「ctrl+v」來複製圖片,再貼進小畫家另存新檔。

然後我就繼續回頭做自己的事,過了幾分鐘老爸又丟了一個新的需求:我這個 word 檔裡面圖片很多耶,這樣每張圖片都要重複一次這個動作,很麻煩耶,而且我不想每張圖片都要自己重新命名啦!

……

說實話從來沒遇到過這麼實際的需求,於是我開始思考要怎樣很方便的一次取出內嵌在 word 檔的所有圖片,而且這方法必須是對一般正常人是很簡單的,我總不能叫老爸打開 VBE 寫一段 VBA recursive 的把所有圖檔取出來,然後 call FileSystem API 去存檔吧?!

這時候我想起來去年有一次研討會講如何客製化 Office 2007 的 Ribbon,好像可以用來解決這個問題!

2009 年 5 月的 Microsoft TechNet Magazine 有一篇「A Guide to Customizing the Office 2007 Ribbon」,很適合拿來當做 reference,對 dev 來說可以當做 Office 2007 的檔案格式的入門文章。對於要做 Office Automation 的人來說也很實用,如果要深入底層追問題的話。

關鍵在於 Office 2007 的檔案格式:Office Open XML(MSDNWiki),這是一個 zip 格式,可以想像成一份 Office 2007 Document 就跟一份 HTML Document 一樣,是由文字、圖片、影片等等的資料兜出來的,這些資料都是各自獨立的檔案,最後透過 Office 把這些檔案合併為 .docx/.xslx/.pptx 等格式的單一檔案。Office 2007 Document 也是用 Markup Language 來描述的,並不是 binary 編碼的格式。

(所以在 Office System 裡面應當也有類似 Web Browser 的 Layout Engine 之類的東西)

那麼到底要如何一次取出 word 檔內的所有圖片呢?請按照以下操作步驟:
  1. 若是由 Word 2003 建立的 .doc 檔,請先用 Word 2007 打開。(若是 .docx 格式請直接跳到步驟 3)
  2. 將 .doc 檔案另存為 .docx 格式。(這時可能會跳出一些警告訊息說格式可能會跑掉,請直接忽略它,圖片並不會因此被扭曲變形)
  3. 將附檔名從 .docx 改為 .zip。
  4. 解壓縮這個 zip 檔,word 檔中所有的圖片會位於 word\media 資料夾中。
就是這麼簡單,雖然這種需求可以說十年才遇到一次,但是要是不知道這種接近 hack 的技巧,處理起來還真是很頭大呢!(我猜可能網路上可以找到現成的小工具來做這件事,但是我懶惰沒有去找 XD 如果這個小工具還要安裝的話,感覺也不太保險…)

PS. A Guide to Customizing the Office 2007 Ribbon 中有提到:
After you've edited the contents of the package, you need to change the file extension back from .zip to its original extension. But you don't have to keep changing the extension to .zip each time you want to edit the underlying package. Instead, you can use a utility that will recognize your Office Open XML Format document as a ZIP package without ever changing the extension in the first place. There are at least a few of these. One open source option that I like is 7-zip. After you install it, just right-click your Office Open XML Format document, point to 7-zip, and then click Open Archive. You can even edit XML document parts directly in the package, and the archive utility will prompt you to update the package after you save your changes.


我只能說 7-zip 真是太優秀啦!又免費阿!有裝 7-zip 的話就不用把副檔名改成 zip 了,直接就可以把 .docx/.xslx/.pptx 內的檔案解壓縮出來到你指定的資料夾囉!

另外,A Guide to Customizing the Office 2007 Ribbon 裡面的 xml sample code 是有問題的,不能用「<Ribbon></Ribbon>」,要全部用小寫:「<ribbon></ribbon>」

Google Spreadsheet 裡用規則運算式

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