Whitecolor пишет:Как это можно сделать не разбивая одну таблицу на три таблицы?
Эта задача довольно сложна и зависит от определенных допущений.
В документе могут быть как регулярные таблицы, так и форматирующие.
Регулярные таблицы (РТ) содержат номер таблицы, на базе, напр., поля {SEQ} или группы полей; заголовки столбцов - «шапку», которая может быть довольно сложной структуры. Как правило, регулярные таблицы должны иметь для некоторых заголовочных строк признак повторения при переходе таблицы на следующий лист, с тем, чтобы на каждом листе была видна «шапка» таблицы.
Форматирующие таблицы (ФТ) предназначены для более наглядного оформления материала и зачастую могут иметь невидимые границы таблицы и не иметь «шапки».
Понятно, что следует ввести допущение: обрабатываться должны только регулярные таблицы.
Word не предоставляет возможности напрямую решить поставленную задачу, но ее можно было бы решить следующим образом:
Если текст многостраничной таблицы меняться не будет, то лучше ее вручную разбить на несколько таблиц, сформировав необходимые заголовки продолжения или окончания.
Если текст таблицы будет меняться (будут добавляться и удаляться строки), то стоит следовать некоей процедуре, которую можно было бы автоматизировать через VBA. Это операции разбивки и воссоединения РТ. Вот как я представляю себе основные операции:
1. Операция разбивки.
Во всем документе обработать все РТ на «разбивку». Для каждой РТ надо создать копию ее «шапки» и зафиксировать ее номер, потом найти строку, являющуюся последней на текущей странице и выполнить операцию разбивки таблицы (Ctrl+Shift+Enter). В образовавшийся пустой абзац вписать фразу типа «Продолжение таблицы NNN» (или «Окончание таблицы NNN»), где NNN - номер РТ. Абзац со сформированным подзаголовком сцепить со следующим куском разбитой таблицы. Абзац подзаголовка (вместе с символом конца абзаца) выделить закладкой с определенным префиксом, напр., «Table_sep_XXXXXX», где XXX - сквозной номер (это нужно для операций «воссоединения» таблиц РТ перед новой операцией разбивки). Может оказаться так, что найденная перед разбивкой РТ последняя на странице строка является строкой шапки или первой строкой после шапки - тогда всю РТ надо перенести на следующую страницу (напр., вставив перед заголовком таблицы разрыв страницы).
Копию «шапки» лучше создавать так: наложить на шапку закладку с определенным именем, а затем в начало новой порции таблицы на новом листе вставить кросс-ссылку на текст этой закладки. Текст самой кросс-ссылки также выполнить закладкой с определенным префиксом, напр., «Table_sep_headref_XXXXXX». Результат операции - отсоединение от РТ первой порции РТ в самостоятельную РТ и преобразование оставшейся порции РТ также в отдельную РТ. Таким образом надо обработать все РТ. При обработке учитывать номер части разбиваемой РТ: если она последняя, то формировать подзаголовок «Окончание таблицы NNN».
Сложность этого этапа - определение строк «шапки» и создание копии «шапки».
2. Операция воссоединения РТ. В каждом документе необходимо обновлять поля. Кроме того, каждая часть любой РТ может «расти» и «уменьшаться» с разной скоростью. Все это приводит к необходимости обслуживания разбитых РТ. Под «воссоединением» РТ я понимаю преобразование всех РТ-частей в общую РТ для выполнения новой разбивки. Чтобы объединить РТ-части, достаточно удалить в документе диапазоны , помеченные закладками «Table_sep_XXXXXX», а также закладками, покрывающими кросс-ссылки на «шапки» разбитых РТ.
Общая порядок действий с применением описанной методики:
А. Автор документа вносит изменения в необходимые РТ.
Б. Автор обновляет все поля в документе.
В. Автор выполняет операции сначала воссоединения, затем разбивки РТ (это должен быть отдельный VBA-макрос, реализующий описанную выше методику: описанное выше можно считать маленьким ТЗ ).
Г. Автор снова обновляет все поля в документе.