Конструкция \1 в Visual Basic for Applications соответствует $1 в JavaScript, остальное должно быть понятно. Все операции можно записать в автоматическом режиме (вы выбираете те или иные действия, а скрипт их переводит на VBA и записывает в виде макроса).

Листинг 8.10. Скрипт на VBA для Word

Sub txtToIDD_AI()

// Отключение режима отслеживания изменений If ActiveDocument.TrackRevisions = True Then

- ActiveDocument.TrackRevisions = False End If

// Делаем поправку на человеческий фактор - учитываем, что, кроме // символа табуляции, люди ошибаются и часто добавляют пробелы.

// Поэтому ищем табулятор с пробелом и пробел удаляем.

Selection.Find.ClearFormatting With Selection.Find .Text = " rt) "

.Replacement.Text = "\1"

.Forward = True .Wrap = wdFindNoAsk .Format = False .MatchWildcards = True .MatchSoundsLike = False .MatchAllWordForms = False End With

Selection.Find.Execute Replace:=wdReplaceAll

// Следующий шаг - замена символов абзаца на табуляторы. В результате // мы получим единственную строку текста, с которой будем потом // работать. Почему нельзя было изначально, в Word, записать все // в виде одной строки? Причина проста - так удобнее переводчикам // отслеживать, что уже переведено, а что нет, особенно это касается // объемных таблиц.

Selection.Find.ClearFormatting With Selection.Find

.Text = "л13([А-гО-9])"

. Replacement. Text = "/>t\l"

.Forward = True .Wrap = wdFindNoAsk .Format = False .MatchWildcards = True .MatchSoundsLike = False .MatchAllWordForms = False End With

Selection.Find.Execute Replace:=wdReplaceAll

// Удаление лишних табуляторов. Должна выполняться четкая // регламентация: между ячейками в строках только один табулятор,

// иначе скрипт-парсер некорректно их отработает.

With Selection.Find

.Text = "Л t{1;5}([A-Za-zO-9])”

.Replacement. Text = n/>t\l"

.Forward = True .Wrap = wdFindNoAsk .Format = False .MatchWildcards = True .MatchSoundsLike = False .MatchAllWordForms = False End With

Selection.Find.Execute Replace:=wdReplaceAll

// Сохранение результата в виде файла Selection.Сору

Documents.Add DocumentType:=wdNewBlankDocument Selection.PasteAndFormat (wdPasteDefault)

ChangeFileOpenDirectory "D:\"

ActiveDocument.SaveAs FileName:="temp.txt”, _

FileFormat:=wdFormatText, LockComments:=False, Password:="", _ AddToRecentFiles:=True, WritePassword:="", _ ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _ SaveNativePictureFormat:=False, SaveFormsData:=False, _ SaveAsAOCELetter:= False, Encoding:=1251, InsertLineBreaks:=False, AllowSubstitutions:=False, LineEnding:=wdCRLF Activewindow.Close End Sub

Следующий шаг выполняется на стороне InDesign: скрипт открывает только что сохраненный файл, разбивает его по заранее предопределенным разделителям и каждый получившийся фрагмент вставляет по очереди во все выделенные ячейки в таблице из публикации (листинг 8.11). При этом все происходит как нужно. Допустим, мы меняем текст в шапке таблицы. В таком случае первый фрагмент переносится в первую выделенную ячейку, второй - в следующую колонку, и т. д. Если был выделен, допустим, столбец, то опять-таки первый фрагмент занимает место в первой строке, второй - в следующей строке, и т. д. Наконец, если были выделены несколько строк, InDesign пробегает сначала по горизонтали (по строкам), в конце строки переходит на следующую и все повторяется.


⇐ вернуться назад | | далее ⇒