标签: Microsoft Office

用自定义属性功能管理 Word 文档中的「待定内容」

在使用 Word 制作合同等格式文本的过程中,经常会需要处理一些「待定内容」,例如签署方的全称、签署日期等。对此,常见的处理方法是用「[*]」、下划线等方式做标记,等确认后再填上。

这种方法是有很多缺陷的。如果待定内容很多,逐个输入这些「标记」和事后查找替换都很麻烦,而且容易遗漏(更别提它们真的很丑)。有什么办法可以更方便地插入、管理和更新这些待定内容呢?换种问法,Word 文档中有没有什么合适的地方存放这些信息呢?

Word 文档的「属性」(properties)功能就是这样一个理想的容器。

提到 Word 文档属性,我们一般会想到创建日期、修改日期这些文件系统属性,或者作者、标题这些文档标准属性。但实际上,Word 也支持用户创建「自定义属性」,其名称和值都可以自由设定。不仅如此,Word 还提供了专门的文档属性设置界面,相当于附赠了「待定信息管理器」的功能。

进一步想到,域(Field)功能可以读取文档属性的值、插入到正文中,并且具有自动更新的特性;两者结合,就是我们需要的解决方案。

假定我们正在起草一份协议,其中甲乙双方的名称和签署日期都是待定的,并且将在协议中反复出现。我们先尝试手动将这些信息添加为自定义属性,然后通过域插入到文档中。

首先,单击「文件」>「信息」>「属性」>「高级属性」(对于 Mac,单击「文件」>「属性」),然后切换到「自定义」选项卡。

然后,在「名称」框中,为自定义属性键入一个名称。例如,对于甲乙双方的名称,可以分别命名为「partyA」「partyB」等;对于签署日期,可以命名为「ExeDate」。

接着,在「类型」列表中选择数据的类型,然后在「值」框中输入属性的值。例如,甲乙方的名称应该是文本,而签署日期应该选为日期。

需要注意,日期类型的数据必须以系统当前区域设置对应的日期格式输入。对于简体中文系统,这个格式一般是 yyyy-MM-dd(形如 2021-01-10),而英文系统则一般是 M/d/yyyy(形如 1/10/2021)。如果你不能确定,可以到 Windows 系统的「设置」>「时间和语言」>「地区」下的「地区格式」,或 macOS 的「系统偏好设置」>「语言和地区」中查看。

接下来,我们通过域将自定义属性插入到正文中。点击「插入」>「域」,然后在弹出的对话框中选择 DocProperty 域,并在域代码输入框中通过 DOCPROPERTY "自定义属性名称"

Word 文档导出为 PDF 时出现额外脚注

昨天在把一个合同从 Word 版本导出为 PDF 的时候,发现导出的 PDF 版总是会在页脚处多出一串代码(形如 XY&Z\12345.67),但在 Word 中并不能看到任何对应的文字。

打印时页脚自动出现的编号(文件内容和代码都是我乱编的)
打印时页脚自动出现的编号(文件内容和代码都是我乱编的)

虽然暂时不知道这串代码的意思,但看外观像是某种格式的文件编号。于是首先尝试搜索其中的字母部分 XY&Z,发现是某个律所的简称(全称类似 Xenos, Yanko & Zais, LLP)。

看来,这串字符确实是文件编号。剩下的问题就是它是如何出现的,以及怎么去掉。

考虑到文件编号只在导出成 PDF 时才出现,而导出 PDF 的操作基本相当于打印,便联想到 Word 中域功能的特性——打印时自动更新页眉和页脚中的域。于是再次进入脚注编辑界面并按 Option-F9 显示域代码,果然看到这串隐形文件编号的对应位置有一个域,代码为 { DOCPROPERTY"SWDocID" }

查阅 …

如何在 Word 文档的同一段落内插入自动编号

在使用 Word 编辑文档的过程中,我们经常会遇到需要在一段话内列举带编号项目的情况,例如:

鼓励网络信息内容服务平台坚持主流价值导向,优化信息推荐机制,加强版面页面生态管理,在下列重点环节(包括服务类型、位置版块等)积极呈现本规定第五条规定的信息:(一)互联网新闻信息服务首页首屏、弹窗和重要新闻信息内容页面等;(二)互联网用户公众账号信息服务精选、热搜等;(三)博客、微博客信息服务热门推荐、榜单类、弹窗及基于地理位置的信息服务版块等;[…]

在这些场合,编号的输入和修改是比较繁琐的。如果编号项目的总数只有两三个,工作量还能忍受;但如果数量达到两位数,逐个手敲就很低效了。特别是对于中文文档,在段落中输入 (1)(a)(i) 这样的字母、数字编号,还意味着需要在中英文状态下来回切换。如果后续修改中不幸要删除列表中的某一项,也就意味着要手动修改它之后的每一个编号,更加耽误时间。

在多段落列表中,这些麻烦是不存在的——只要用现成的自动编号功能就行了。然而,自动编号并不能在同一个段落中使用。

不过,这并不意味着在段落内部就无法实现自动编号。解决方法就是使用 Word 的(field)功能。

关于「域」在 Word 中的含义和使用方法,我在之前的文章中已经有所介绍,这里不再重复。简言之,所谓的「域」就是一个占位符,它的作用是告诉 Word「显示的时候把我换成别的东西」。

这里,我们要使用的是 SEQ。如名称(SEQuence)所表明,它的作用就是产生一个数字「序列」。但与自动编号不同的是,SEQ 域可以在同一段落中多次出现,且位置不限于段落开头。因此,通过在段落中插入多个 SEQ 域,就可以实现段内自动编号的效果。

通过 SEQ 域插入编号:基础操作

我们首先通过一个简单场景——插入形如「(一)、(二)、(三)」的段内序号——来熟悉 SEQ

用邮件合并为 Word 文档批量配图

引言

在 Word 文档中插入图片是再日常不过的操作之一。然而,如果你有过批量向 Word 中插入图片的经历,那大概不会是什么令人愉快的体验——不仅要考虑粘贴格式、文字环绕等千奇百怪的格式问题,还要应对 Word 顽疾一般的卡顿和崩溃。这些软件缺陷经常能让加图片这类本不费工夫的操作变成一种煎熬。

设想这样的工作场景:你的老板准备对三国公司进行投资,但在此之前想对它的三个子公司——魏国公司、蜀国公司和吴国公司——进行调查,看它们是否在几家主流假新闻媒体——《扭腰时报》、《花儿街日报》和蓬勃新闻——上有过负面报道。为此,你被要求在上述媒体的网站上搜索三家公司的相关报道,并将搜索结果截图,分类汇总到一份报告中。

上面的任务只涉及三家公司和三个网站,加起来也不过需要创建 3 个文档,插入 9 次图片。但如果需要调查的是 30 家公司和 30 个网站呢?逐一手工创建文档并插入图片似乎就不是明智的做法了。且不论操作繁琐和浪费时间,忙中出错的机率也会大大增加。

有没有什么更省事的方法——比如,能不能只提供图片素材和文档模板,剩下的配图工作让机器自动完成?答案是肯定的,方法就是借助 Word 内建的自动化工具——邮件合并

这个答案听起来可能让人有些摸不着头脑——发邮件和插入图片有什么关系?实际上,邮件合并是一个「名不副实」的功能。它的作用是以一个模板为基础,批量将用户提供的信息填入留空位置。之所以被称作「邮件合并」,是因为其最主要的使用场景之一就是制作群发邮件——内容相同、只有称呼等部分因收件人而异。

但邮件合并功能的潜力并不止于填写收件人;它能填写任何文本变量。另一方面,Word 文档中的图片不仅可以直接嵌入在文件中,也可以是指向外部文件(包括本地和远程)的链接。而既然链接的本质是文本,我们就可以通过插入文本的方式插入链接,进而实现插入图片。这样,邮件合并和插入图片间的桥梁就被打通了。后文就以上面设想的工作场景为例,说明如何使用邮件合并功能批量插入图片。

一、准备工作

在正式使用邮件合并前,需要先做一些准备工作。

  1. 按一定的命名规律收集资源文件。 这实际上应该是任何资料收集工作都应遵循的原则,只是对于自动化操作来说格外重要。例如,在上面的情境中,我们可以将针对魏国公司的三张截图分别命名为 1-NYT.png1-WSJ.png1-BBG.png,而将针对另外两家公司的截图各自以

在移除 Word 文档样式的同时保留格式

有时,我们需要将他人传过来的多份 Word 文档进行整合。这种情况下,他人文档中预设的样式可能会给排版造成不便。但是,如果一刀切地将其粘贴为纯文本,又会导致文本层级难以辨识。本文介绍一种利用 Office 中的 VBA 脚本,在移除样式的同时保留文本格式的方法。

A. 如果你使用 macOS 和 Office 2016 for Mac 

  1. 正常使用样式功能来编排文档;
  2. 依次点击菜单中的「工具」–「宏」–「Visual Basic 编辑器…」;

  3. 在弹出的窗口右侧粘贴如下脚本:
    Sub DirectFormat()
                Dim para As Paragraph
                Dim fnt As Font
                Dim pfmt As ParagraphFormat
                For Each