Выгрузка данных для верстки
Запустите в MS Access наше приложение баз данных, в главном окне базы выберите объект Модули и двойным щелчком на модуле Main войдите в режим редактирования модуля.
Добавьте строки программного кода, чтобы готовый модуль у вас выглядел следующим образом:
Option Compare Database
Option Explicit
Public NomerRub As Double
Public NomerVip As Double
Public Function NRub() As Double
NRub = NomerRub
End Function
Public Function NVip()
NVip = NomerVip
End Function
Здесь добавленные строки выделены красным цветом. Таким образом, добавлена одна переменная NomerVip и одна функция NVip(). Переменная NomerVip — это порядковый номер вашего издания, номер выпуска. Функция NVip() нам потребуется для выборки из базы всех объявлений, которые будут публиковаться в конкретном номере.
Сохраним изменения и выйдем из редактора программного кода.
В главном окне базы данных выберем объект Запросы и двойным кликом запустим процедуру <Создание запроса в режиме конструктора>.
В окне Добавление таблицы выберем таблицу Publish и двойным кликом отправим её в окно запроса. Больше никаких таблиц нам не надо, закрываем окно Добавление таблицы (рис. 44).
Перетащите мышью все поля из таблицы Publish в поля запроса, как показано на рис. 45.
В поле запроса Nom впишите функцию NVip().
В полях Rub и SubRub установите сортировку по возрастанию (рис. 46).
Сохраните запрос с именем _Publish и закройте окно построителя запросов.
Все подготовительные операции закончены, и пришло время завершающего шага нашей работы. Сейчас мы займемся процедурой выгрузки информации из базы.
Перейдите в главном окне программы к объекту Формы, выделите форму Output и нажмите вверху окна кнопку Конструктор, чтобы загрузить форму в режиме Конструктора.
Выделим на форме кнопку Продолжить, нажмем правую кнопку мыши и из меню выберем Обработка событий, затем Программы. Загрузится редактор программного кода, в котором уже будут строчки Private Sub КнопкаПродолжить_Click() и End Sub
Копируем между ними следующий программный код, в результате у вас должно получиться следующее:
Private Sub КнопкаПродолжить_Click() ‘ Эта строка у вас уже есть, ее копировать не надо
Dim db As Database
Dim rs As DAO.Recordset
Dim rst As DAO.Recordset
Dim rsset As DAO.Recordset
Dim td As TableDef
Dim q As QueryDef
Dim str As String ‘ строка
Dim Rb As String
Dim SRb As String
Dim fs ‘ для работы с файловой системой
Dim f ‘ для работы с файловой системойSet db = CurrentDb ‘ ссылка на текущую базу данных
‘Проверка, заполнена ли таблица со стилями Индизайна для верстки
Set td = db.TableDefs(«IndesignTagSet»)
Set rsset = td.OpenRecordset(dbOpenSnapshot)
rsset.MoveFirst
If rsset!Styles = «» Or IsNull(rsset!Styles) Then
MsgBox («Не заполнена таблица стилей Индизайна»)
Exit Sub
End If‘Проверка: правильно ли введен номер выпуска.
‘Если в поле ничего не введено – выводим сообщение
‘и завершаем работу
If IsNull(Me!Поле0) Then
MsgBox («Не введен номер выпуска»)
Exit Sub
End If‘ Присваиваем глобальной переменной введенный номер выпуска
NomerVip = Me![Поле0]‘ Открываем рекордсет на основании сделанного и сохраненного ранее запроса
Set q = db.QueryDefs(«_Publish») ‘ссылка на сохраненный в базе запрос
Set rst = q.OpenRecordset ‘ открываем рекордсет
Set rs = rst.OpenRecordset‘ Проверка на число записей в выпуске
If rs.RecordCount = 0 Then
MsgBox («В таблице публикаций нет записей с таким номером выпуска»)
Exit Sub
End If‘ Контроль заполнения полей с рубриками и подрубриками
rs.MoveFirst
Do Until rs.EOF
If rs!Rub = «» Or IsNull(rs!Rub) Then
MsgBox («Есть незаполненное поле рубрики, продолжение невозможно»)
Exit Sub
End If
If rs!SubRub = «» Or IsNull(rs!SubRub) Then
MsgBox («Есть незаполненное поле подрубрики, продолжение невозможно»)
Exit Sub
End If
rs.MoveNext
Loop‘Записываем в файл заголовок тэгового файла
‘ Инициализируем файловую систему
Set fs = CreateObject(«Scripting.FileSystemObject»)
‘Создаем текстовый файл для вывода информации.
‘Для простоты мы не используем стандартные диалоги
‘файловой системы, а вводим имя файла и путь прямо здесь.
‘если вам не подходят имя и путь, введите свои.
Set f = fs.CreateTextFile(«d:\ToIndesign.txt», True, True)‘———–Запись в файл заголовка тэгового файла (стилей)———————
str = rsset!Styles & vbNewLine
f.write str
‘———– Запись в файл табличных данных —————–
rs.MoveFirst
Rb = rs!Rub
SRb = rs!SubRub
i = 0
‘ цикл по рекордсету пока не достигнем его конца
Do Until rs.EOF
If rs!Rub = Rb Then
If rs!SubRub = SRb Then
Select Case i
Case 0
str = «<ParaStyle:Rubrica>» & Rb & vbNewLine
f.write str ‘запись в файл
i = 1
rs.MovePrevious
Case 1
str = «<ParaStyle:Subrubrica>» & SRb & vbNewLine
f.write str ‘запись в файл
i = 2
rs.MovePrevious
Case 2
‘ Если публикация текстовая (в базе параметр – TypePub)
If rs!TypePub = «ТекстБ» Or rs!TypePub = «ТекстПл» Or rs!TypePub = «ТекстПлВыд» Then
str = «<ParaStyle:Text>»
If Not IsNull(rs!BText) Then
str = str & «<CharStyle:StartBold>» & rs!BText & «<CharStyle:>» & » »
End If
If Not IsNull(rs!Text) Then
str = str & rs!Text & » »
End If
If Not IsNull(rs!Tel) Then
str = str & «» & «<CharStyle:Tel>» & rs!Tel & «<CharStyle:>»
End If
str = str & vbNewLine
f.write str
Else ‘ графическая публикация (рекламный блок)
str = «<ParaStyle:Text>» & «РЕКЛАМА № » & rs!Id & «, расположение » & rs!Place & vbNewLine
f.write str
End If
End Select
Else
SRb = rs!SubRub
i = 1
rs.MovePrevious
End If
Else
Rb = rs!Rub
SRb = rs!SubRub
i = 0
rs.MovePrevious
End If
rs.MoveNext
str = «»
Loop
‘———————————————
f.Close
Set f = Nothing
Set fs = Nothing
Set rs = Nothing
Set rst = Nothing
Set db = Nothing
MsgBox («Готово! Результат в файле d:\ToIndesign.txt»)
DoCmd.CloseEnd Sub ‘Эта строка у вас уже есть, ее копировать не надо
Сохраняем программный код, выходим, на этом конец нашей работе. В базу теперь можно не только вводить данные, но и делать выгрузку их для Индизайна.
Надеюсь, что этот небольшой пример позволит вам создать своё Приложение баз данных с нужными полями, стилями Индизайна и процедурой выгрузки данных.
Через некоторое время я расскажу как создать оболочку базы для автоматической верстки табличных данных.




Очень полезная тема, хотелось бы продолжение )
Поддерживаю. Хотелось бы продолжение.
А что насчет графических элементов? Например, в рубриках добавить либо импортированый рисунок, либо графическое оформление Индизайн. На первой страничке было сказано, что с графикой…
Тэгированный текст Индизайна не позволяет вставлять графику. Но никто не мешает прописать в тэгированном файле «путь к картинке» в нужном месте и потом запустить скрипт, который эту картинку вставит на полосу. Таких скриптов уже достаточно много разработано.
Я только вникаю во все, но заметил, что тег. текст не позволяет этого. Нашел лишь Индиз сниппет – .idms для графических элементов в индизе. Порылся в скриптинге, там можно написать, чтобы вставляло графику и тд, вопрос в том как в том же Access прописать запуск нужного скрипта, который в свою очередь вставлял бы графику, например, в шабку рубрики? И по возможности, если вам известен какой-нибдуь уже готовый скрипт на вставку, можете подсказать)
Скрипт в данной ситуации надо запускать из индизайна после того, как загружен тэгированный текст на полосы. В тегированном тексте должны быть ссылки на графику, примерно в таком виде:
текст текст текст
[c :\tmp\картинка1.tif]
текст текст текст
[c :\tmp\картинка2.tif]
Скрипт должен найти эти строки и заменить картинками. Из разработанных для этого скриптов есть ImportTG, place-n-Fit,также ищите на нашем сайте nrvs с названием «Замена текста с маршрутом к рисунку на сам рисунок»
В Access также можно запускать скрипт, но об этом разговор еще впереди.
А можно непосредственно в Индизайне в скриптах на VBA работать с БД?
т.е. скрипт написанный на VBA открывает БД (dbf или там cvs) и работать с ней как в том же Word или Access ?
Пробовал наоборот: из Aссess запускал сценарий VBA в результате которого данные базы из разных таблиц выбирались, сортировались и затем верстались в Индизайне. Из Индизайна тоже наверное можно. Только не знаю как.
Да Access все понятно, и тот же Word с макросом на VBA верстки и компоновки сразу, а индиз же поддерживает VBA интересно если тот же код из Word Засунуть туда где открытие базы и переработка, он будет идти на индизи вот в чем вопрос, чтобы исключить верстку в accesse и прочих сторонних прогах, а сразу в индизе в скрипте чтобы делалось.
Чтобы запустить скрипт VBA из Access и иметь дело с Индизайном надо к Access подключить библиотеку функций Индизайна. Именно это я и проделывал. У меня сначала шла обработка данных базы а затем скрипт обращался к Индизайну и там выполнял верстку используя функции [не Access а] самого Индизайна.
Если вы хотите из индизайна открывать базу, то надо библиотеки функций базы подключить к индизайновскому скрипту. Мне это делать не доводилось.
2 iv-mi
Ммм, в вашем ответе открылся другой взгляд на вопрос. Значит можно в Access выполнять функции Индизайна. Это вплане тех функций скриптов? (java, vba) или в плане тех – программных кодов индизайна?) (т.е. рисование допустим объектов, создание оглавления)
Да даже сам этот факт уже рождает кучу идей. Я сделал обработу базы в Access, а верстку через скрипт в Индизе. Получается можно это объединить сразу в Access все. Можете подсказать как?
Хотя, есть другой путь решения, из Access через VBA прописать выполнение скрипта в Индизайне. (тоже хочу узнать как прописать запуск скрипта)
Да, в Ассеss можно выполнять ф-ции индизайна, думаю и в других базах тоже. В основном это касается VBA, хотя можно извернуться и выполнить код Javascript. Для этого подключаем библиотеку индизайна к Access. И потом например на кнопочку в форме приложения баз данных вешаем программный код скрипта Индизайна. Ну там открыть индизайн, задать страницы, добавить текстовый фрейм, в нем создать таблицу, и заполнить её данными с таблицы Ассess, затем подгрузить в индизайн свой портрет и на нем поставить пять звезд. То есть получается единая среда программирования Access+Indesign. В ней можно использовать код как для Ассеss так и для индизайна, применяя любые функции обеих программ. Но только запуск задачи должен выполняться из Ассess. А чтобы из индизайна обращаться к базе и проделать то же самое, надо к индизайну (в скрипте) прицепить библиотеку ф-ций Access. Но как я говорил уже, этот вопрос не копал.
Библиотека функций индизайна прицепляется к Access так. В редакторе программного кода Access надо выбрать пункт меню Tools, затем Reference и поставить галочку напротив пункта Adobe Indesign XX Type Librery (XX – версия индизайна).
Выполнить один скрипт VBA из другого можно при помощи ф-ции DoScript. Это в ответ на ваш последний вопрос. На сайте Adobe выложены демонстрационные скрипты VBA и там есть пример. А можете просто скопировать ваш индизайновский скрипт в скрипт обработки Access, в конец. Должно всё работать. При условии подключения библиотеки индизайна.
Здравствуйте, подскажите пожалуйста, как сортировать выгрузку объявлений по алфавиту?
Спасибо!
В данном конкретном примере сортировка производится (если правильно помню) в запросе _Publish.
Set q = db.QueryDefs(«_Publish») ‘ссылка на сохраненный в базе запрос
Скачайте готовый к использованию пример в конце этого материала и посмотрите этот запрос.
iv-mi, спасибо за помощь, Publish посмотрю …
Есть еще вопрос, здесь говорилось о верстке таблиц из базы, у меня газета в среднем 4000-5000 тысяч объявлений и 400-500 макетов, реально ли автоматизировать выгрузку, сейчас работаю в QuarkXPress и уходит по 4 часа на верстку – жизни и сил нет… Хочу перейти на InDesign в надежде на облегчение работы.
Спасибо.
4-5 миллионов объявлений и 4 часа верстки – это немного.
Так у меня 4-5 тысяч… если бы 4-5 миллионов, – другое дело)
Да, переходите на Индизайн. Но чтобы хорошо потом кататься прийдейся и саночки повозить. Вы готовы?
Конечно, я макет уже потихоньку переделываю.
Leave your response!
You must be logged in to post a comment.
Вы хотите избавиться от рутинных операций и посвятить время творческому процессу? Вам нужен новый скрипт или плагин к InDesign? Обращайтесь к нам. Мы это сделаем сами или поручим грамотным, квалифицированным специалистам.
E-mail: boriskasmoscow[at]gmail.com
Skype: boriskasmoscow
Последние темы
Свежие комментарии
О комментариях
Облако меток
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
Скрипты
Переносы для гурманов
Архивы
UserOnline
Скриптопедия
Рубрики
Календарь
Набор скриптов для верстки математических формул
DTP Scripting
Управление
Adobe Illustrator
Adobe InDesign
InDesign-Scripting
Наиболее комментируемые
Эффективная работа в Adobe InDesign : Добро пожаловать !