На моем рабочем месте мы делаем много версий 5-7-страничного документа, который представляет собой одну длинную таблицу в Word 2010. В повторяющейся строке заголовка указывается тип информации в каждом столбце.

Проблема заключается в том, что для создания заголовков разделов требуется вечность. Члены моей команды должны вставить новую строку для заголовка раздела. Вручную объедините ячейки в одну большую ячейку заголовка, затем вручную измените боковые границы на белый. Затем, если раздел переходит на следующую страницу, они должны создать новую строку с именем Заголовок раздела (продолжение).

Результат этого очень визуально некрасив и труден для чтения, так как строка с заголовком, работающим в заголовке, выглядит как плавающая, отключенная над заголовком первого раздела на каждой странице, вместо того, чтобы сидеть под заголовком, как вы видели бы в обычной таблице. Но хуже всего то, что когда документ обновляется и изменяется нумерация страниц, кто-то должен вернуться назад и повторить все заголовки разделов, добавив и удалив строки вручную.

Я чувствую, что слишком много часов было потрачено впустую на этот процесс, и должен быть способ автоматизировать некоторые или все это. Я также открыт для использования программного обеспечения, отличного от Word, если оно дешевое или бесплатное для коммерческого использования. Любые предложения приветствуются.

2 ответа2

1

Я не думаю, что будет легкий способ достичь этого макета, но я надеюсь, что кто-то придумает более простой подход ...

Я могу придумать два основных подхода, которые вы могли бы использовать. На данный момент я предполагаю, что в документе нет других верхних и нижних колонтитулов. Я разместил документ, показывающий, как второй подход будет работать на

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

Вероятно, было бы лучше взглянуть на это, чтобы увидеть, если оно даже близко к тому, что вам нужно, прежде чем читать дальше.

Один подход , я думаю, требует некоторых макросов VBA, чтобы он работал. Что бы вы сделали, это

  • Удалить повторяющуюся строку заголовка
  • Поместите эту строку как таблицу из одной строки в заголовок документа, который затем будет повторяться
  • Используйте одну таблицу для каждого раздела с повторением строки заголовка в каждом разделе.

В этом случае заголовки столбцов основной таблицы всегда будут выше "заголовков разделов", "продолжение" не будет. тексты (хотя вы можете исправить это с помощью клуджа), и вам придется иметь дело с тем фактом, что заголовки столбцов отделены от данных. Это означает две вещи:

  • между заголовками и данными будет вертикальный разрыв (вы можете уменьшить его, убедившись, что строка заголовков выше, чем заголовок документа)
  • ширина столбца может варьироваться от таблицы к столу, завинчивая
    горизонтальное выравнивание. Единственный способ, которым я думаю, вы сможете исправить
    это легко было бы запустить макрос (VBA), который применял тот же
    ширина столбцов для каждой строки в каждой таблице. Если ваши пользователи не
    разрешено использовать макросы VBA и / или макет таблицы может быть более сложным, чем предполагает ваш пример документа (например, когда-нибудь вы объединяете / разделяете
    столбцы), то это, вероятно, не будет практическим подходом.

Второй подход заключается в сохранении макета таблицы, но используйте некоторые коды полей Word, чтобы вставить заголовок на каждую страницу.

Я не думаю, что предложение, которое я сделал ранее для использования полей {STYLEREF}, сработает, потому что они на самом деле не предоставляют заголовки продолжения (например, поле STYLEREF обычно отображает текст первого заголовка на странице, а не текст заголовка, который продолжается).

Единственный способ, которым я знаю, как это сделать, - это использовать некоторые необычные поля SEQ, чтобы отслеживать заголовки разделов и решать, что должно отображаться в заголовке каждой страницы. Чтобы это работало, ваши пользователи должны будут иметь возможность работать с полевыми кодами (к сожалению, они выглядят сложными и довольно легко ломаются). Кроме того, Word работает достаточно усердно, чтобы поддерживать свои верхние и нижние колонтитулы в актуальном состоянии, и иногда может запутаться, когда в этих областях много полей со значениями, зависящими от страницы. Таким образом, это имеет тенденцию работать не так хорошо, когда документ становится больше - я бы проверил, работает ли он для вашего типа и размера документа.

Конкретный подход, который я описываю здесь, делает некоторые предположения о том, что вы хотите в верхней части каждой страницы:

  • ничего вверху первой страницы
  • ничего в верхней части страницы, если первая строка на странице является заголовком раздела
  • в противном случае, продолжение текста с предыдущей страницы.

В документе, который я разместил, есть образцы полей, которые вам нужны. Для каждого заголовка раздела пользователь должен будет вставить две строки таблицы, содержащие несколько полей. Это совершенно неосуществимо, если только у пользователя нет механизма, позволяющего ему это делать легко. Например, если они настроили две строки как отформатированную запись автозамены под названием «seched», то все, что им нужно сделать, это ввести

seched

с последующим пробелом

в начале строки таблицы, и две строки будут включены. Есть и другие возможности.

Я предполагаю, что ваш начальный документ Word будет иметь (как минимум) первую (заголовочную) строку таблицы и заголовок первого раздела, т.е.Front Pages »в вашем образце документа. двухстрочный блок в начале каждого последующего заголовка раздела. В идеале пользователь мог бы вставить весь блок, поля и все, используя автозамену или, возможно, строительный блок. Затем им нужно будет изменить текст в полях. Если что-то подобное не возможно в вашей среде, этот подход также не будет практичным.

Ключевые понятия для использования полей в этой ситуации следующие: поле имеет код и результат b. Некоторые примеры кодов полей:

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

с. {} - это специальные фигурные пары кода поля, которые можно вставить в версии Word для Windows с помощью ctrl-F9. Вы не можете просто набрать их, используя обычные символы {и} на клавиатуре 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

е. Многие типы полей не обновляются. Чтобы увидеть правильные результаты, вы должны выбрать их и нажать F9. Часто самый простой способ сделать это - выделить весь документ с помощью ctrl-A, а затем нажать клавишу F9. (переход в режим предварительного просмотра и повторный вывод часто предлагается в качестве опции, но на самом деле он не обновляет все типы полей). Это может потребоваться, например, когда изменилась нумерация страниц вашего документа. Для этого типа документа пользователь должен сделать следующее:

  • показывать результаты полей, а не коды
  • с точкой вставки в теле документа, используйте Ctrl-A, затем F9

    е. Вы можете вложить коды полей определенным образом, например, результат

    {IF {SEQ S \c} = 0 "S это ноль" "S не ноль"}

должно быть «S равно нулю», когда текущее значение переменной SEQuence S равно 0, и вы только что обновили все поля. В этом случае обе пары {} должны быть «специальными скобками кода поля»

г. В верхнем или нижнем колонтитуле документа значения полей обычно равны значению поля, как если бы оно было размещено в конце основного текста на странице, а не в начале страницы. Итак, мы должны найти способ решить, что значение в начале страницы.

Метод, который я предлагаю, использует следующие поля:

В первой ячейке заголовка таблицы есть два поля:

{ 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 на "Front pages".

{ T } (сокращение { REF T } отображает значение закладки T

{ SET "T{ SEQ S \c }" … } . В разделе 1 это установит значение T2. В разделе 2 будет установлено значение T3 и т.д. Мы устанавливаем T2, T3 и т.д. В текст, который мы хотим для уведомления о продолжении в заголовке страницы. Таким образом, вы можете либо повторно использовать значение { T } и добавить к нему «... (продолжение):», как я это делал выше, либо вы можете написать совершенно другой текст продолжения для каждого раздела. Опять же, для этого может потребоваться изменить высоту строки, чтобы он мог видеть весь текст во всех полях.

{ 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, Б-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, то есть пустой текст.

В противном случае первый маркер на странице является маркером конца раздела, и это означает, что нам нужно отобразить текст продолжения для раздела, записанного в маркере.

Есть одна возможность, которую я не исследовал в этом случае, и это то, что тонкий ряд, содержащий маркер конца раздела, является первой строкой на странице. Я не уверен, что этого можно избежать, и, возможно, нелегко обнаружить эту ситуацию. Я думаю, что если это произойдет, единственным решением будет уменьшить высоту предыдущей ячейки, пока пустая ячейка не переместится на страницу вверх.

0

Repeat as header row at the top of each page должна работать для вас.

После создания таблицы нажмите Table properties выберите « Row а затем выберите параметр « Repeat as header row at the top of each page .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .