【问题标题】:Font of all headings in a Word DocumentWord 文档中所有标题的字体
【发布时间】:2020-07-03 07:00:32
【问题描述】:

我正在尝试从 word 文档中检索所有标题的字体名称和大小。知道如何获得吗?

【问题讨论】:

  • 您的意思是“标题”中的标题和页眉/页脚中的标题还是像 Heading1、Heading2、Heading3 这样的标题?你想制作一个数组然后重用它们吗?还是您只想要文档的字体/大小报告?您是否想将此 vba 重用于您无法控制文档的各种文档,或者只是您机器上的文档,但您有很多文档?
  • 我想要像 Heading1、Heading2 这样的标题。我想检索它们以进行报告,并在可能的情况下与标题的标准格式进行比较。
  • Hrm - 这让它变得更棘手。文档中的实际文本可能很容易覆盖默认标题格式。您是否正在寻找默认的 Header1 字体和大小应该是什么,或者它们在特定文档中的实际外观?
  • 我认为部分问题是许多用户会手动设置标题,通常不考虑“标题”菜单。所以我可能会创建一条 16pt Verdana 的线,但“节点”设置为 body,我从来没有注意到。这是你需要担心的事情吗?
  • 实际上是问题所在。如下图和实际文档中找到的字体不同 Set rng = docOutline.Content asrHeadings = _ docSource.GetCrossReferenceItems(wdRefTypeHeading) For intItem = LBound(astrHeadings) To UBound(astrHeadings) strText = Trim$(astrHeadings(intItem)) intLevel = GetLevel(CStr(astrHeadings(intItem))) strFont = rng.Font.Name rng.InsertAfter strText & intLevel rng.InsertAfter strFont & vbNewLine rng.Style = "Heading" & intLevel rng.Collapse wdCollapseEnd Next intItem End Sub

标签: vba ms-word


【解决方案1】:

基本结构如下:

Public Sub ShowFontAndSize()
    Dim singleLine As Paragraph
    Dim lineText As String

    For Each singleLine In ActiveDocument.Paragraphs
     Debug.Print singleLine.Range.Font.Name
     Debug.Print singleLine.Range.Font.Size
    Next singleLine
End Sub

问题是,如果同一行上有不同的字体和大小,这将无法感知。如果有可能,您需要在段落循环中添加另一个带有For Each singleCharacter In singleLine.Range.Characters 的循环。

编辑:一个棘手的问题是,一旦您收集了这些数据,如何处理它。建立一个数组似乎很自然,但 VBA 数组是无用的,因为 .append() 等基本方法需要您重新调整整个数组。如果您想走这条路,请参阅http://www.cpearson.com/excel/VBAArrays.htm 了解更多信息。

【讨论】:

  • 是否有类似的循环可以简单地返回文档中使用的所有字体和字体大小对,而无需遍历每个字符?我认为这个元信息将以这样一种方式存储,您可以在不逐个字母的情况下检索它。如果它可以以这种方式返回,也许他可以使用一定量的猜测最小的字体大小不是标题,因此所有其他都是标题?我知道,这是一个很大的猜测,但在大多数情况下是相当安全的。
  • 有,并且您在之前的回答中提到了它。但是,不幸的是,它在任何典型的工作环境中都没有用。 Word 尝试使用 HeadingStyles 集合存储所有字体/大小/等,但只有最细致的用户才会始终如一地使用该功能。其他人都使用覆盖,因为覆盖比使用标题更容易,尤其是在 Word 2003 和更早版本中。
【解决方案2】:

最直接的解决方案是在 Word 中打开文档并访问对象模型。这通常使用 VBA 完成,但您也可以使用 VSTO(Visual Studio Tools for Office)来使用 .NET(例如 C# og VB.NET)。就我个人而言,我发现 C#/VB.NET 比 VBA 更好的语言。

一旦您可以访问对象模型,您就必须枚举文档中的段落。当您找到一个标题(可能由样式定义)时,您必须弄清楚标题的格式。

【讨论】:

    【解决方案3】:

    这是我从MSDN page on "HeadingStyles" 的简短浏览中得到的:

    MsgBox ActiveDocument.HeadingStyles(1).Style
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-01
      • 2016-02-17
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多