Ms word 在文档标题中添加不带.doc扩展名的文件名字段

Ms word 在文档标题中添加不带.doc扩展名的文件名字段,ms-word,word-2007,Ms Word,Word 2007,在Office2007中工作时,我想在文档标题中添加一个文件名字段。该文档稍后将成为PDF格式,因此我不需要扩展名 我玩过Insert->QuickParts->Field,没有用。我直觉上认为这需要一个公式 如果您能提供帮助,请提前感谢。您的感觉很对 Insert>QuickParts>Field>FileName是一种方法,但是从下面的屏幕截图中可以看到,您没有打开或关闭文件扩展名的选项。 显示或不显示(莎士比亚风格)扩展名完全取决于Windows资源管理器设置,以显示或隐藏已知的文件扩展名

在Office2007中工作时,我想在文档标题中添加一个文件名字段。该文档稍后将成为PDF格式,因此我不需要扩展名

我玩过Insert->QuickParts->Field,没有用。我直觉上认为这需要一个公式


如果您能提供帮助,请提前感谢。

您的感觉很对

Insert>QuickParts>Field>FileName
是一种方法,但是从下面的屏幕截图中可以看到,您没有打开或关闭文件扩展名的选项。 显示或不显示(莎士比亚风格)扩展名完全取决于Windows资源管理器设置,以显示或隐藏已知的文件扩展名。所以,要么更改该设置,要么需要一些代码

一个非常简单的宏如下所示:

Sub InsertCurrentFileName()
    Selection.InsertBefore Text:=Left(ActiveDocument.Name, Len(ActiveDocument.Name) - 4)
End Sub
它所做的只是去掉“文件名字符串”的最后4个字符,例如“.doc”-如果您保护“.docx”,则“.”将被保留。此外,此宏将运行一次,当文件名更改时,您需要再次运行它

也许您可以解释一下,在文档头中使用文件名可以实现什么目的?您是否试图在转换过程中使用文档标题中的文件名来设置某些PDF属性?为什么不使用文档标题?您以后需要PDF中的原始文件名吗?为什么

另外两页帮助您解决问题(都依赖于宏…):

添加[标题]而不是文件名 并且可能会添加一些列出的其他文档属性

的确,文件名字段没有“basename only”选项

长期:功能要求 长期以来,我向Microsoft提出了一项功能请求,网址为:

我邀请你和其他访问此帖子的人投票支持这一建议

短期变通办法 宏(VBA代码) 正如@DennisG所建议的,编写宏可能是最方便的解决方法

自定义属性 但您可能希望避免将任何宏与word文档关联,以避免安全问题(例如,如果分发文档)。因此,另一种解决方法是使用硬编码值“MyDocumentBaseName”创建自定义属性
FileBaseName

创建FileBaseName自定义属性并为其指定值:

  • 在MS Word中打开空白文档
  • 另存为“MyTempReport.docx”
  • 在MS Word菜单中,MyTempReport.docx打开>文件[选项卡]>信息>属性:单击>高级属性…>自定义[选项卡]
  • 输入“名称”:“FileBaseName”;“值”:“MyTempReport”
在文档中插入自定义文档属性
FileBaseName

  • MS Word菜单>插入[选项卡]>文本[组]>快速部件>字段
  • 从“字段名称”中选择“DocProperty”
  • 从“字段属性”>“属性”:选择“FileBaseName”>确定
现在应该将“MyTempReport”作为字段插入到文档中

限制:

  • 如果重命名文件,这不会反映在
    FileBaseName
    字段中。相反,您必须手动更改高级属性中的
    FileBaseName
    属性。。。(如上所述)
  • 您必须在每个特定文档中创建此自定义属性

如上图所示插入文件名字段并另存为文件名。在打印预览模式下查看并返回编辑模式:现在应显示文件名而不是文档n

一旦您有了文件名,您就可以用不同的颜色格式化不同的部分:因此将.extension的颜色更改为文档的背景色(可能是白色)


我在页脚中这样做是为了使pdf版本不显示“.docx”。

创建一个类似以下内容的宏:

Dim f As String
f = Dir(ActiveDocument.FullName)
intPos = InStr(1, f, ".")
If intPos > 0 Then
    f = Left(f, intPos - 1)
End If
doc.Variables("BaseFileName").Value = f
插入如下字段:


完成。

只需在Windows资源管理器中隐藏文件扩展名。然后重新打开文档。然后将其导出。该名称将不具有扩展名。:)

为了让文档名在字段中自动更新,您需要向宏中添加更多的代码。此宏将在每次打开文件时检查文件名,并将更新希望看到文件名的所有字段

Sub AutoOpen()
' AutoUpdate Macro which creates filename without extension and updates fields
Dim aStory As Range
Dim aField As Field
Dim fname As String
        fname = ActiveDocument.Name
        fname = Left(fname, Len(fname) - 5) 'removes the last five characters from the filename (.docm)

            With ActiveDocument
                .Variables("fname").Value = fname
            End With

       For Each aStory In ActiveDocument.StoryRanges 'updates all fields in the document when you open the file

            For Each aField In aStory.Fields
             aField.Update
          Next aField
       Next aStory

    End Sub
创建此宏后,只需返回文档:

  • 在“插入”选项卡中选择“快速零件”,然后单击“字段”

  • 在字段选项中,选择DocVariable,在字段属性中键入fname,然后单击确定。


然后,它会将您的文件名(无扩展名)插入到您的文档中,每次打开文件时都会更新,并显示新的文件名。

如果且仅当文件名的长度不会更改时,您可以将扩展名的字体更改为“隐藏”:

  • 要插入字段,请转到插入»快速零件(文本)»字段…,然后从列表中选择“文件名”(在“文档信息”类别中),并确保勾选了更新期间保留格式处的复选标记(这会将选项
    \*MERGEFORMAT
    附加到字段代码;如果缺少此选项,则每次更新字段值时,以下隐藏字体效果将消失)
  • 选择显示的文件扩展名(包括
  • 移动到Home»字体(左下角的箭头),然后勾选隐藏复选框
  • 我对以下文件名使用此方法,其中只有修订代码可能会更改:

    • ID\u REV\u一些描述性的名称.doc?
      ,其中
      REV
      只是一个字母,如
      a
      B
      C
      ,等等

    注意:这不会自动更新…您必须重新运行宏来更新字段。这对我来说很有效。我将其设置为在更新期间保留格式,即使更改名称,“.docx”仍然隐藏。我在中使用了@Rob的解决方案