2009-12-16 40 views
5

對於某些自動化測試,我需要創建一個包含字體(用於幾種不同字體)的所有字符的Word Doc。有沒有簡單的方法來創建一個循環遍歷字體中所有可用字符的宏(並將它們插入到文檔中)?在MS Word中打印字體的所有字符

+0

請編輯您的問題並用字形替換字符。字體不包含字符,但包含字形。 – bogdan 2009-12-23 17:45:05

回答

1

Geez ......我很久以前做過類似的事情......是的,有可能這樣做。

一個良好的開端是MSDN


編輯補充:

我知道我曾經做過這樣的事情。通過我的一些舊電子郵件,我發現了一個我發送給我的一個包含這個的朋友的宏。這是它:

Sub GenerateFontCatalog() 
' 
' Macro created in 05/14/2008 by Paulo Santos 
' 
Dim i As Long 
Dim j As Long 
Dim fnt As String 
Dim doc As Document 
Dim fnts() As String 

'* 
'* Get all font names 
'* 
Word.StatusBar = "Reading Font Names..." 
ReDim fnts(Word.FontNames.Count) 
For i = 1 To Word.FontNames.Count 
    fnts(i) = Word.FontNames.Item(i) 
    DoEvents 
Next 

'* 
'* Sort alphabetically 
'* 
Word.StatusBar = "Sorting Font Names..." 
For i = 1 To UBound(fnts) 
    For j = i + 1 To UBound(fnts) 
     If (fnts(i) > fnts(j)) Then 
      fnt = fnts(i) 
      fnts(i) = fnts(j) 
      fnts(j) = fnt 
     End If 
    Next 
    DoEvents 
Next 

Word.StatusBar = "Generating Font Catalog..." 

Set doc = Application.Documents.Add() 
doc.Activate 

'* 
'* Page configuration 
'* 
With ActiveDocument.PageSetup 
    .Orientation = wdOrientPortrait 
    .TopMargin = CentimetersToPoints(2) 
    .BottomMargin = CentimetersToPoints(2) 
    .LeftMargin = CentimetersToPoints(2) 
    .RightMargin = CentimetersToPoints(2) 
End With 

For i = 1 To UBound(fnts) 
    '* 
    '* Write font name 
    '* 
    Selection.Font.Name = "Arial" 
    Selection.Font.Size = 10 
    If (i > 1) Then 
     Selection.TypeParagraph 
     Selection.ParagraphFormat.KeepTogether = False 
     Selection.ParagraphFormat.KeepWithNext = False 
     Selection.TypeParagraph 
    End If 
    Selection.TypeText fnts(i) 
    Selection.ParagraphFormat.KeepWithNext = True 
    Selection.TypeParagraph 

    '* 
    '* Write font sample 
    '* 
    Selection.Font.Name = fnts(i) 
    Selection.Font.Size = 16 
    Selection.TypeText "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & Chr(11) 
    Selection.TypeText "abcdefghijklmnopqrstuvwxyz" & Chr(11) 
    Selection.TypeText "" 
    Selection.ParagraphFormat.KeepTogether = True 

    DoEvents 
Next 

'* 
'* Adjust cursor position 
'* 
Selection.HomeKey Unit:=wdStory 
Selection.InsertBreak Type:=wdSectionBreakNextPage 
Selection.MoveLeft Unit:=wdCharacter, Count:=1 
Selection.MoveUp Unit:=wdLine, Count:=1 

Word.StatusBar = "Generating Font Index..." 
For i = 1 To UBound(fnts) 
    Selection.Font.Name = "Arial" 
    Selection.Font.Size = 10 
    Selection.TypeText fnts(i) & vbTab 
    Selection.Font.Name = fnts(i) 
    Selection.TypeText "ABC abc 123" 
    Selection.TypeParagraph 
Next 

'* 
'* Split the document in two columns 
'* 
With Selection.Sections(1).PageSetup.TextColumns 
    .SetCount NumColumns:=2 
    .EvenlySpaced = True 
    .LineBetween = False 
End With 
Selection.HomeKey Unit:=wdStory, Extend:=True 
Selection.ParagraphFormat.TabStops.Add Position:=Selection.Sections(1).PageSetup.TextColumns(1).Width, Alignment:=wdAlignTabRight, Leader:=wdTabLeaderSpaces 

Selection.HomeKey Unit:=wdStory 
Word.StatusBar = "" 

End Sub 
+0

我並不需要一個字體列表,而是一個字體中所有字符的列表。 – leonm 2009-12-16 20:54:48

+0

好宏(儘管它不完全是請求者在這個特定情況下需要的) - 感謝分享! – monojohnny 2009-12-30 09:33:48

1

是否有一個特定的原因,爲什麼它需要在Word中?這僅僅是想象一個字體的所有字符?如果是這樣,您可以在OS X中使用Font Book並轉到Print,選擇Report Type:Repetoire,然後保存爲PDF。

編輯:似乎我錯過了「自動化測試」。漠視。

0

看起來像一個很好的折衷辦法是創建一個HTML文件& #XXX;每個字符的條目,然後用MS Word打開。

+0

爲什麼downvote?這聽起來像是完全可以接受的解決方案,尤其是因爲您無法訪問Word中的字符列表。 – leonm 2010-02-14 00:31:58

0

這將是不錯的主意,插入

敏捷的棕色狐狸跳過 懶狗

和遍歷需要使用宏來測試字體。

+0

http://en.wikipedia.org/wiki/The_quick_brown_fox_jumps_over_the_lazy_dog可以查看更多詳情 – Thunder 2009-12-23 04:16:22

0

像MS Word這樣的程序將無法告訴你字體中可用的字符。據我的經驗告訴你,只有Window的「角色地圖」應用程序可以顯示你。字符映射可以在您的開始菜單中通過附件找到,或者通過開始,運行...,然後輸入「charmap」,但是沒有方便的方法從字符映射或MS Word收集這些字符。

嚴格地說,在Word中,我不知道它是否可行,但由於您可以在Word中執行腳本,我相信可以讀取字體文件並讀取它們的二進制數據以收集其中的可用字符。這是一種囉嗦的方式,也可能是獲得你想要的東西的唯一方法。

我還沒有找到合適的程序在線來爲我做這件事,對不起。