Я не думаю, що буде такий простий спосіб досягти цього плану, але сподіваюся, що хтось придумає простіший підхід ...
Я можу придумати два основні підходи, якими ви могли скористатися. На даний момент я припускаю, що в документі немає інших заголовків / колонтитулів. Я відправив документ , який показує , як підхід два працюватиме
https://www.dropbox.com/s/ngrhc8yds0umnoj/template_lorumipsum_mod1.docx
Напевно, було б краще подивитися на це, якщо він навіть близький до того, що вам потрібно, перш ніж читати далі.
Я вважаю, що підхід мабуть потребує деяких макросів VBA, щоб він працював. Що ви б робили, так і є
- Видаліть повторюваний рядок заголовка
- Покладіть цей рядок як однорядну таблицю в заголовку документа, який потім повториться
- Використовуйте по одній таблиці для кожного розділу з повторенням заголовка в кожному розділі.
У цьому випадку заголовки стовпців основної таблиці завжди були б над "заголовками розділів", не було б "продовження". тексти (хоча ви, можливо, зможете це виправити за допомогою вилучення), і вам доведеться мати справу з тим, що заголовки стовпців є окремими від даних. Це означає дві речі:
- між заголовками та даними буде вертикальний зазор (ви можете, мабуть, зменшити його, гарантуючи, що рядок заголовків вище, ніж заголовок документа)
- ширина стовпців може змінюватись від таблиці до таблиці,
виконуючи горизонтальне вирівнювання. Єдиний спосіб, на який я думаю, ви зможете легко виправити
це запуск макросу (VBA), який застосовував однакові
ширини стовпців до кожного рядка в кожній таблиці. Якщо вашим користувачам
заборонено використовувати макроси VBA та / або макет таблиці, може бути складнішим, ніж пропонує зразок документа (наприклад, ви колись об'єднувати / розділяти
стовпці), то, мабуть, це не буде практичним підходом.
Підхід два - це зберегти у вас макет таблиці, але використовуйте деякі коди полів Word, щоб вставити заголовок на кожну сторінку.
Я не думаю, що пропозиція, яку я раніше робила для використання полів {STYLEREF}, не спрацює, оскільки вони насправді не надають заголовків продовження (наприклад, поле STYLEREF зазвичай відображає текст першого заголовка на сторінці, а не текст заголовка, який продовжується).
Єдиний спосіб, коли я знаю, як це зробити, - це використовувати деякі незвичайні поля SEQ для відстеження заголовків розділів та вирішення того, що слід відображати в кожному заголовку сторінки. Щоб зробити цю роботу, ваші користувачі повинні мати можливість працювати з кодами полів (на жаль, вони виглядають складно і їх досить легко зламати). Також Word працює надто важко, щоб постійно оновлювати заголовки та колонтитули, а іноді може заплутатися, коли в цих областях є багато полів із значеннями, що залежать від сторінки. Тож це, як правило, не працює так добре, коли документ збільшується - я перевірив би, чи працює він для вашого типу та розміру документа.
Конкретний підхід, який я описую тут, дає деякі припущення щодо того, що ви хочете, вгорі кожної сторінки:
- нічого вгорі першої сторінки
- нічого вгорі сторінки, якщо перший рядок на сторінці - заголовок розділу
- інакше текст продовження з попередньої сторінки.
Документ, який я розмістив, містить зразки потрібних вам полів. Для кожного заголовка розділу користувачеві потрібно буде вставити два рядки таблиці, що містять ряд полів. Це абсолютно недоцільно, якщо у користувача немає механізму, який дозволяє їм це легко робити. Наприклад, якщо вони встановили два рядки як відформатовану запис автокорекції під назвою "seched", то все, що їм потрібно зробити, - це ввести
зашитий
слідом пробіл
на початку рядка таблиці, і два ряди будуть включені. Є й інші можливості.
Я припускаю, що ваш початковий документ Word матиме (принаймні) перший (заголовок) рядок таблиці та перший заголовок розділу, тобто "Front Pages" у вашому зразковому документі. дворядковий блок на початку кожного наступного заголовка розділу. В ідеалі користувач міг би вставити весь блок, поля та все, використовуючи автокорекцію чи, можливо, будівельний блок. Потім їм потрібно буде змінити текст у полях. Якщо щось подібне неможливо здійснити у вашому оточенні, такий підхід також не буде практичним.
Основними поняттями використання полів у цій ситуації є: a. поле має код і результат b. деякі зразки польових кодів:
{ SEQ S \c }
{ PAGE }
{ SET T “some text” }
{ REF T }
c. {} - спеціальні парні дужки з кодовими полями, які можна вставити у версії Windows для Word за допомогою 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
f. Ви можете вкладати кодові поля певними способами, наприклад результатом
{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 на "Титульні сторінки".
{ 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, 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, тобто порожній текст.
В іншому випадку перший маркер на сторінці - це маркер кінця розділу, і це означає, що нам потрібно відобразити текст продовження для розділу, записаного в маркері.
Є одна можливість, що я не досліджував у цьому випадку, і це те, що тонкий рядок, що містить маркер кінця розділу, є першим рядком на сторінці. Я не впевнений, чи можна цього уникнути, і виявити цю ситуацію теж непросто. Я думаю, якщо це відбудеться, єдиним рішенням буде зменшити висоту попередньої комірки, поки порожня клітинка не переміститься вгору на сторінку.