制作一个长表,其中既有重复的列标题,也有节标题

制作一个长表,其中既有重复的列标题,也有节标题

在我的工作场所,我们制作了 5-7 页文档的多个版本,该文档基本上是 Word 2010 中的一个长表格。重复的标题行列出了每列中的信息类型。

问题是手动设置章节标题需要很长时间。我的团队成员必须为章节标题插入一个新行。手动将单元格合并为一个大标题单元格,然后手动将侧边框更改为白色。然后,如果该章节流到下一页,他们必须创建一个名为“章节标题(续)”的新行。

这样做的结果非常难看,难以阅读,标题行似乎不连贯地浮动在每页的第一个部分标题上,而不是像在普通表格中那样位于标题下方。但最糟糕的是,当文档更新并且分页发生变化时,有人必须返回并通过手动添加和删除行来重新设置所有部分标题。

我觉得这个过程浪费了太多时间,必须有办法将部分或全部自动化。我也愿意使用除 Word 之外的其他软件,如果它便宜或免费用于商业用途。任何建议都值得赞赏。

答案1

我认为没有简单的方法来实现这种布局,但我希望有人能想到一种更简单的方法……

我能想到两种主要方法。我暂时假设文档中没有其他页眉/页脚。我发布了一个文档,展示了如何方法二将在工作

https://www.dropbox.com/s/ngrhc8yds0umnoj/template_lorumipsum_mod1.docx

在继续阅读之前,最好先查看一下它是否接近您的需要。

方法一我认为需要一些 VBA 宏才能使其工作。您需要做的是

  • 删除重复标题行
  • 将该行作为单行表放在文档标题中,然后重复
  • 每个部分使用一个表格,并重复每个部分的标题行。

在这种情况下,主表列标题将始终位于“部分标题”上方,不会有“续”文本(尽管您可以使用临时解决方案修复该问题),并且您必须处理列标题与数据分离的事实。这意味着两件事:

  • 标题和数据之间会有一个垂直间隙(您可以通过确保标题行高于文档标题来减少该间隙)
  • 各个表的列宽可能不同,从而搞乱了
    水平对齐。我认为唯一可以
    轻松修复此问题的方法是运行 (VBA) 宏,该宏将相同的
    列宽应用于每个表的每一行。如果您的用户不允许
    使用 VBA 宏和/或表布局可能比示例文档建议的更复杂(例如,您有时会合并/拆分
    列),那么这可能不是一种实用的方法。

方法二就是保留现有的表格布局,但使用一些 Word 字段代码在每页上插入标题。

我认为我之前提出的使用 { STYLEREF } 字段的建议不会起作用,因为它们实际上并不提供连续标题(例如, STYLEREF 字段通常会显示页面上第一个标题的文本,而不是正在继续的标题的文本)。

我知道的唯一方法是使用一些不常见的 SEQ 字段来跟踪节标题并决定每个页眉中应显示的内容。要实现这一点,您的用户必须能够使用字段代码(不幸的是,它们看起来很复杂并且很容易被破坏)。此外,Word 非常努力地保持其页眉和页脚的更新,并且当这些区域中有大量具有页面相关值的字段时,有时会有点混乱。因此,当文档变大时,这种方法往往效果不佳 - 我会检查它是否适合您的文档类型和大小。

我在这里描述的具体方法对您希望在每个页面的顶部显示的内容做出了一些假设:

  • 第一页顶部没有任何内容
  • 如果页面第一行是节标题,则页面顶部不显示任何内容
  • 否则,将延续上一页的文本。

我发布的文档包含您需要的字段示例。对于每个部分标题,用户需要插入两个包含多个字段的表格行。除非用户拥有允许他们轻松执行此操作的机制,否则这完全不切实际。例如,如果他们将这两行设置为名为“seched”的格式化自动更正条目,那么他们只需键入

塞赫德

后面跟着一个空格

在表格行的开头,则将包含这两行。还有其他可能性。

我设想的是,您的起始 Word 文档将至少包含表格的第一行(标题)和第一个节标题,即示例文档中的“首页”。每个后续节标题开头都有一个两行块。理想情况下,用户可以使用自动更正或构建块插入整个块、字段和所有内容。然后他们需要修改字段中的文本。如果在您的环境中无法实现这样的操作,那么这种方法也不实用。

关键概念在这种情况下使用字段的方法如下:a. 字段具有代码和结果 b. 一些字段代码示例如下:

{ SEQ S \c }
{ PAGE }
{ SET T “some text” }
{ REF T }

c. { } 是特殊的字段代码括号对,您可以使用 ctrl-F9 在 Windows 版本的 Word 中插入它们。您不能只使用键盘上的普通 { 和 } 字符输入它们 d. 您可以使用 Alt-F9 在“字段代码”和“字段结果”视图之间切换

上述四个字段的结果可能类似于

4
2
(a SET field does not show a result. it just sets the value of a bookmark, in this case the bookmark “T”)
some text

e. 许多字段类型不会自行更新。要查看正确的结果,您必须选择它们并按 F9。通常,最简单的方法是使用 ctrl-A 选择整个文档,然后按 F9。(通常建议进入打印预览并再次退出,但实际上它不会更新所有字段类型)。例如,当您的文档的分页发生变化时,您可能需要执行此操作。对于此文档类型,用户真正应该做的是

  • 显示字段结果而不是代码
  • 将插入点放在文档正文中,使用 ctrl-A,然后按 F9

    f. 您可以以某些方式嵌套字段代码,例如

    { IF { SEQ S \c } = 0 "S 为零' "S 不为零" }

当 SEQuence 变量 S 的当前值为 0 并且您刚刚更新了所有字段时,应该是“S 为零”。在这种情况下,两对 { } 都需要是“特殊字段代码括号”

g. 在文档页眉或页脚中,字段的值通常等于放置在结尾页面正文的顶部,而不是开始页面的。因此,我们必须找到一种方法来确定开始页面的。

我建议的方法使用以下字段:

在表格标题的第一个单元格中有两个字段:

{ SET T1 "" }(将书签 T1 设置为空字符串)

{ SEQ S \r1 \h } (将序列变量 S 设置为 1,隐藏结果)

每个部分标题都有以下字段,但您需要将 { SET T } 字段中的文本替换为该标题的标题文本

{ SEQ S \h }{ SET T "Front pages" }{ T }{ SET "T{ SEQ S \c }" "...(cont.): { T }" }{ SEQ "P{ PAGE \#0 }N{ SEQ "P{ PAGE \#0 }" }" \r1 \h }

{ SEQ S \h }将 S 的值增加 1(在第 1 部分中,S 将为 2),然后\h隐藏结果

{ SET T "Front pages" }将书签 T 设置为“首页”。

{ T }{ REF T }(显示书签 T 的值的 缩写

{ SET "T{ SEQ S \c }" … }。在第 1 部分中,这将设置 T2 的值。在第 2 部分中,它将设置 T3 的值,依此类推。我们将 T2、T3 等设置为页眉中我们想要的续行通知文本。因此,您可以重复使用的值{ T }并在其前面添加“... (cont.): ”,就像我上面所做的那样,或者您可以为每个部分编写完全不同的续行文本。同样,这可能需要用户修改行高,以便他们可以看到所有字段中的所有文本。

{ SEQ S \c }是序列变量S的当前值。

{ SEQ "P{ PAGE \#0 }N{ SEQ "P{ PAGE \#0 }" \r1 \h }设置根据其所在的页码和页面上此类字段的数量命名的序列变量的值。

(假设您使用的是直接编号(1、2、3、4、5 等),而不是使用章节页码编号(A-1、A-2 等),如果文档中有多个 Word 部分,则编号是连续的,例如,每个部分不会再次从 1 开始。

如果您使用 A、B、C 等,而不是 1、2、3,则开关\#应返回 1、2、3。但对于章节页码,这仅在页码唯一时才有效,例如 A-1、A-2、B-3、B-4 等,而不是 A-1、A-2、B-1、B-2 等。)

例如,在第 2 页上,以这种方式设置的第一个字段将设置序列变量 S2N1 的值。第二个将设置 S2N2 的值。我将这一系列序列变量称为“标记变量”

除了第一行之外,在每个标题行上方,我们还需要一个单单元格行,我们将使其尽可能细(垂直),并且包含以下字段代码:

{ SEQ "P{ PAGE \#0 }N{ SEQ "P{ PAGE \#0 }" }" \r{ SEQ S \c } \h }

这会将标记变量设置为部分编号变量 S。

最后,在页眉中(可以是所有页眉,也可以使用不同的首页页眉),输入

{ IF { SEQ "P{ PAGE \#0 }N1" \c } = 0 "{ "T{ SEQ S \c }" }" "{ "T{ SEQ "P{ PAGE }N1" \c }" }" }

这说明

If the first marker on the page has value 0 Then 
  display the continuation text for the section that is current at the end of  
  the page
Else
  display the continuation text for the section number stored in the first marker on the page
End If

当我们设置标记时,我们总是将其值设置为 1 或当前节号。因此,在没有标记的页面上,标记值将永远为 0,在这种情况下,页面末尾的当前节与页面开头的当前节相同。

如果页面上的第一个标记设置为 1,则它是节的开始标记,并且页面上没有更早的节的结束标记。这意味着我们在页面顶部有一个节标题,因此我们显示 T1,即空白文本。

否则,页面上的第一个标记是节结束标记,这意味着我们需要显示标记中记录的节的延续文本。

在这种情况下,有一种可能性我还没有调查过,那就是包含节末标记的细行是页面上的第一行。我不确定是否可以避免这种情况,而且可能也不容易检测到这种情况。我认为如果发生这种情况,唯一的解决方案就是降低前一个单元格的高度,直到空白单元格向上移动一页。

答案2

Repeat as header row at the top of each page应该适合你。

创建表格后,单击Table properties“选择” Row,然后选择选项Repeat as header row at the top of each page

在此处输入图片描述

相关内容