word中插入漂亮的代碼?
有時寫文檔時需要將代碼粘貼到word中,但直接粘貼到word中的代碼雖能保持換行與縮進等格式,但在一般代碼編輯工具中的關鍵字高亮功能卻無法實現。該方法無需任何插件,只需要製作一個宏即可實現類似sublime的顯示效果
工具/原料
Word
方法/步驟
準備:首先完成當前所有內容,建議把代碼放入單獨的文本框中,方便處理,也有較好的視覺效果。記得一定要拷貝一份副本!因為很可能因為代碼量比較多,處理宏的時候卡死,只能強制退出WORD了。
當前文檔新定義一個樣式,命名為"code",專門用來對代碼進行格式化。由於是代碼,所以推薦中文使用黑體(註釋等),而英文使用等寬字體(courier new)。步驟如圖。
選中代碼,單擊樣式庫 ccode,將代碼應用該樣式
新建宏,步驟如圖
將VBA代碼(在下一步中)拷貝進去,保存後關閉 (有VBA或相關程序經驗者可根據自己需要進行相關修改,如關鍵詞和高亮顏色等)
'script to high light code In document
Private Function isKeyword(w) As Boolean
Dim keys As New Collection
With keys
.Add "if": .Add "else": .Add "elseif": .Add "case": .Add "switch": .Add "break"
.Add "for": .Add "continue": .Add "do": .Add "while": .Add "foreach": .Add "echo"
.Add "define": .Add "array": .Add "NULL": .Add "function": .Add "include": .Add "return"
.Add "global": .Add "as": .Add "die": .Add "header": .Add "this": .Add "empty"
.Add "isset": .Add "mysql_fetch_assoc": .Add "class": .Add "style"
.Add "name": .Add "value": .Add "type": .Add "width": .Add "_POST": .Add "_GET"
End With
isKeyword = isSpecial(w, keys)
End Function
Private Function isSpecial(ByVal w As String, ByRef col As Collection) As Boolean
For Each i In col
If w = i Then
isSpecial = True
Exit Function
End If
Next
isspeical = False
End Function
Private Function isOperator(w) As Boolean
Dim ops As New Collection
With ops
.Add "+": .Add "-": .Add "*": .Add "/": .Add "&": .Add "^": .Add ";"
.Add "%": .Add "#": .Add "!": .Add ":": .Add ",": .Add "."
.Add " ": .Add "&&": .Add " ": .Add "=": .Add "++": .Add "--"
.Add "'": .Add """"
End With
isOperator = isSpecial(w, ops)
End Function
Private Function isType(ByVal w As String) As Boolean
Dim types As New Collection
With types
.Add "SELECT": .Add "FROM": .Add "WHERE": .Add "INSERT": .Add "INTO": .Add "VALUES": .Add "ORDER"
.Add "BY": .Add "LIMIT": .Add "ASC": .Add "DESC": .Add "UPDATE": .Add "DELETE": .Add "COUNT"
.Add "html": .Add "head": .Add "title": .Add "body": .Add "p": .Add "h1": .Add " h2"
.Add "h3": .Add "center": .Add "ul": .Add "ol": .Add "li": .Add "a"
.Add "input": .Add "form": .Add "b"
End With
isType = isSpecial(w, types)
End Function
Sub SyntaxHighlight()
Dim wordCount As Integer
Dim d As Integer
' set the style of selection
Selection.Style = "ccode"
d = 0
wordCount = Selection.Words.Count
Selection.StartOf wdWord
While d < wordCount
d = d + Selection.MoveRight(wdWord, 1, wdExtend)
w = Selection.Text
If isKeyword(Trim(w)) = True Then
Selection.Font.Color = wdColorBlue
ElseIf isType(Trim(w)) = True Then
Selection.Font.Color = wdColorDarkRed
Selection.Font.Bold = True
ElseIf isOperator(Trim(w)) = True Then
Selection.Font.Color = wdColorBrown
ElseIf Trim(w) = "//" Then
'lIne comment
Selection.MoveEnd wdLine, 1
commentWords = Selection.Words.Count
d = d + commentWords
Selection.Font.Color = wdColorGreen
Selection.MoveStart wdWord, commentWords
ElseIf Trim(w) = "/*" Then
'block comment
While Selection.Characters.Last <> "/"
Selection.MoveLeft wdCharacter, 1, wdExtend
Selection.MoveEndUntil ("*")
Selection.MoveRight wdCharacter, 2, wdExtend
Wend
commentWords = Selection.Words.Count
d = d + commentWords
Selection.Font.Color = wdColorGreen
Selection.MoveStart wdWord, commentWords
End If
'move the start of selection to next word
Selection.MoveStart wdWord
Wend
' prepare For set lIne number
Selection.MoveLeft wdWord, wordCount, wdExtend
SetLIneNumber
End Sub
Private Sub SetLIneNumber()
Dim lines As Integer
lines = Selection.Paragraphs.Count
Selection.StartOf wdParagraph
For l = 1 To lines
lIneNum = l & " "
If l < 10 Then
lIneNum = lIneNum & " "
End If
Selection.Text = lIneNum
Selection.Font.Bold = False
Selection.Font.Color = wdColorAutomatic
p = Selection.MoveDown(wdLine, 1, wdMove)
Selection.StartOf wdLine
Next
End Sub
選定代碼文本,然後執行highlight腳本: “視圖”- “宏”- 選中“SyntaxHighlight”-“運行”,然後執行就可以了。處理較長代碼時需要一定時間,請耐心等待。
注意事項
處理前一定要對原文章進行備份,以免前功盡棄。
處理較長代碼時需要一定時間,請耐心等待。