[ID CC-CC2022] Перебор информации в выбранной группе

  • Автор темы Автор темы ReallyCool
  • Дата начала Дата начала

ReallyCool

Участник
Топикстартер
Сообщения
55
Реакции
1
Дорогие коллеги,
начинаю осваивать кодинг на VBScript для Indesign CC2018,
и столкнулся с такой проблемой, прошу Вашего доброго совета.

1. Имеем каталог изделий, на каждой странице - есть объект Group,
в котором в нескольких строках представлена информация об изделии,
вида:
№ Артикул Длина Ширина Высота
1 АААА 10 10 10
2 БББББ 20 20 20
3 ВВВВВ 30 30 30

Каждая строка - это видимо отдельные TextFrame внутри объекта Group?
Далее мне нужно из Эксель файла обновить размеры изделий, соответственно сравнивая Артикул из Indesign файла и из Excel.

2. С помощью этого кода я нахожу эту Group на текущей странице документа, выбираю ее и назначаю его в mySelectedGroup :
Sub FindGroupOnCurrentPage()
Set myInDesign = CreateObject("InDesign.Application")
Set myDocument = myInDesign.ActiveDocument
Set myPage = myInDesign.ActiveWindow.ActivePage
For mycounter = 1 To myPage.PageItems.Count
Set myPageItem = myPage.PageItems.Item(mycounter)
myInDesign.ActiveDocument.Select (myPageItem)
If TypeName(myPageItem) = "Group" Then
Set mySelectedGroup = myPage.PageItems.Item(mycounter).AllPageItems
End If
Next
End Sub

3. Но как мне дальше обработать полученный контейнер группы mySelectedGroup ??
какими методами\командами получить значение артикула и его размеры?
В книгах\мануалах пока не нашел точные команды для VBScript .

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

Вложения

  • Без имени-3.jpg
    Без имени-3.jpg
    35.7 КБ · Просм.: 302
Вы ж прямо из эксела макрос отлаживаете? Вот и посмотрите в тамошнем VBA отладчике содержимое myPage.PageItems.Item(mycounter).AllPageItems - многое сразу прояснится
А вообще когда код в сообщение постите, надо его в специальные теги в шапке заключать иначе форумный движок поест
 
  • Спасибо
Реакции: ReallyCool
  • Спасибо
Реакции: ReallyCool
Вы ж прямо из эксела макрос отлаживаете? Вот и посмотрите в тамошнем VBA отладчике содержимое
в том-то и дело, что в Екселе отладчик ничего не дает информативного, вот скрин:
 

Вложения

  • Без имени-5.jpg
    Без имени-5.jpg
    26.1 КБ · Просм.: 272
Давно в экселовском отладчике не работал, но по моему там можно подключить индизайновскую объектную модель
 
там можно подключить индизайновскую объектную модель
подключается в свойствах проекта только возможность использовать библиотеку inDesign, насколько я понял из прочитанных туториалов.
 
не проще заново сформировать макеты через DataMerge
дело в том что страниц более тысячи, и постоянно меняются размеры изделий в Excel файле, нужно автоматизировать обновление информации в каталоге...
 
Дальше обрабатывайте содержимое группы. Выделять объекты необязательно
Код:
Sub FindGroupOnCurrentPage()
  Dim o As Object
  Set myInDesign = CreateObject("InDesign.Application")
  Set myDocument = myInDesign.ActiveDocument
  Set myPage = myInDesign.ActiveWindow.ActivePage
  For mycounter = 1 To myPage.PageItems.Count
    Set myPageItem = myPage.PageItems.Item(mycounter)
    'myInDesign.ActiveDocument.Select (myPageItem)'Излишне
    If TypeName(myPageItem) = "Group" Then
      'Set mySelectedGroup = myPage.PageItems.Item(mycounter).AllPageItems
      For Each o In myPageItem.AllPageItems
        Debug.Print o.StrokeColor 'печатаем в окно отладки цвет обводки каждого объекта внутри группы
      Next o
    End If
  Next mycounter
End Sub
 
  • Спасибо
Реакции: ReallyCool
Дальше обрабатывайте содержимое группы. Выделять объекты необязательно
Ну там может быть такое внутри что черт ногу сломит
А что отладчиком получается все таки никак?
 
Ну там может быть такое внутри что черт ногу сломит
Вот когда ТС выложит idml вместо indd, смогу посмотреть. А пока на самодельном образце из прямоугольничков гоняю.
А отладчик само-собой фурыкает, в меру сил.
 
спасибо за пинок в верном направлении, но пните еще плиз,
где почитать о всех методах\операторах, таких как в строке:

o.StrokeColor

здесь например

но придется переводить под VB, тут для JS. в основном по-моему первую маленькую букву на большую заменять

возможно, проще было бы делать основной скрипт на JS, и его из VB запускать. более того, необязательно напрямую из excel этим заниматься, можно сохранить XLS в CSV, и отдельным скриптом на JS уже работать с макетом
 
Последнее редактирование:
спасибо за пинок в верном направлении, но пните еще плиз,
где почитать о всех методах\операторах, таких как в строке:

o.StrokeColor
Только если экселовский отладчик индизайновскую модель не видит вы застрелитесь разбирать содержимое групп
Тогда уж проще зайти в индизайн и тамошним яваскрипт отладчиком поковыряться в кишках вашего файла
 
ТС выложит idml вместо indd, смогу посмотреть.
вот файл idml


проще было бы делать основной скрипт на JS, и его из VB запускать
давно программирую на VBA, поэтому и решил учить VBscript...

экселовский отладчик индизайновскую модель не видит вы застрелитесь разбирать содержимое групп
да, я уже понял, что нихрена не видно под VB Excel, что внутри переменных... поэтому видимо не популярен VBscript...
или же под каким-либо другим VB отладчиком видна модель inDesing?


и кстате, по поводу .StrokeColor - ошибку дает VBA
 

Вложения

  • Без имени-7.jpg
    Без имени-7.jpg
    29.5 КБ · Просм.: 259