2009-12-16 79 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中执行脚本,我相信可以读取字体文件并读取它们的二进制数据以收集其中的可用字符。这是一种啰嗦的方式,也可能是获得你想要的东西的唯一方法。

我还没有找到合适的程序在线来为我做这件事,对不起。