Если есть вопросы по скриптам

  • Автор темы Автор темы Oleg Butrin
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Если есть вопросы по скриптам

Коллеги, помогите, плиз, придумать способ назначать ячейкам таблицы Cell Style оптом. А то получается только по одной, а это меееедленно и печаааааально.
 
Ответ: Если есть вопросы по скриптам

Вдогонку.
Пока что я не придумал ничего умнее чем выделять всю таблицу и использую WinAPI посылать Индизайну сочетание клавиш... но это, сами понимаете, через задницу.
 
Ответ: Если есть вопросы по скриптам

Через everyItem() не пробовал?

Выделен текстовый фрейм, в нем таблица:
PHP:
app.selection[0].tables[0].cells.everyItem().appliedCellStyle = app.activeDocument.cellStyles.item('Test');
 
Ответ: Если есть вопросы по скриптам

Две проблемы. :(
Во-первых у меня этот метод почему-то не импортировался... А во вторых он же возвращает массив. Разве у массива есть appliedCellStyle?

Во всяком случае с itemByRange который возвращает тоже самое (массив ячеек) у меня такой трюк не прошел. Говорит что "метод appliedCellStyle отсутствует у объекта".

PS

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

PPS
С горячими клавишами вообще хохма. Похоже в WinAPI багов больше чем я думал. Контрол и Альт работают нормально, а вот Шифт. Их три: "просто Шифт", правый Шифт и левый Шифт. Так вот "просто Шифт" и левый Шифт не нажимаются, а правый не отжимается обратно. Чтобы его отжать приходится передавать фокус ввода из ИнДизайна обратно в приложение. Вот тут-то возможны, на мой взгляд, грабли. Если Индизайн еще не получил фокус, а прога уже пытается следующую таблицу обработать... то он просто не увидит "нажатий".
Думаю надо переназначить горячие клавиши, но я уже привык просто на уровне спинного мозга... :(
(Где-то я видел функцию которая ожидает готовности к вводу. Надо поискать.)
 
Ответ: Если есть вопросы по скриптам

Ох, дурно мне. :(( Всю ночь с этим скриптом просидел, пытаясь победить баги API и как выясняется напрасно. Все мои подозрения подтвердились в полной мере. На одиночной таблице алгоритм работает прекрасно, но в цикле - голяк. Некоторые таблицы обрабатывает, другие обрабатывает наполовину, третьи забывает вообще. Расставил задержки на 0,5 - 1,5 секунды - помогло но не сильно.

В связи с вышеизложенным вопрос становится еще более актуальным. :(
 
Ответ: Если есть вопросы по скриптам

Делайте .saveAs() каждые 50 итераций.
 
Ответ: Если есть вопросы по скриптам

ИМХО ничем не поможет. Он уже на 5-6 сбоит. Плюс это зависит от размеров таблицы. Когда выделяешь таблицу строк так на полтыщи Индюк слегка притормаживает, и иногда этого достаточно...
 
Ответ: Если есть вопросы по скриптам


Не по теме:
Блин, даже нашел ту функцию, которая ждет пока приложение будет готово к вводу пользователя, только нифига не помогает. Похоже, мудрый ИнДиз реализует все это дело в несколько потоков и все время готов принимать ввод.


Господа, может есть какие идеи насчет использования стиля таблицы? Главное что не устраивает это то, что при этом толщина обводок сбрасывается к умолчальной, заданной в стиле. Может есть способ из скрипта одним махом запомнить толщину и стиль обводки, а потом налепить обратно на таблицу?
 
Ответ: Если есть вопросы по скриптам

Прочитал. Не пойму, в чем у вас проблема. Полностью солидарен с vbatushevым в (пост 123) - нужно делать через everyItem(). Проверено - работает идеально, быстро и без глюков.
 
Ответ: Если есть вопросы по скриптам

sakhar
vbatushev
Ок. Спасибо.
Не могли бы вы мне помочь еще кое-чем? Скажите пожалуйста, у вас этот метод (everyItem) из VB доступен?

Ище один вопрос. Тот же маневр но через ItemByRange работает?
 
Ответ: Если есть вопросы по скриптам

Судя по примерам скриптов из дистриба CS3, конкретно скрипт TableFormatting, то на vbs эти методы недоступны.
 
Ответ: Если есть вопросы по скриптам

Вот-вот. А следовательно и из Дельфи тоже.

Остается вопрос про ItemByRange. У меня не получилось. :(
 
Ответ: Если есть вопросы по скриптам

Усе, отбой.
Вопрос снят с обсуждения как успешно разрешенный.
 
Ответ: Если есть вопросы по скриптам

Тьфу блин!
Скрипт-то! 8 строк:
Код:
for (var i = 0; i<app.selection[0].tables.length; i++){
with (app.selection[0].tables[i].cells.everyItem()) {
appliedCellStyle = app.activeDocument.cellStyles.item('Cell Style 1');
clearCellStyleOverrides();
minimumHeight = '0.11cm';
autoGrow = true;
texts.everyItem().appliedCharacterStyle = app.activeDocument.characterStyles.item('Body 9');
texts.everyItem().firstLineIndent = 0;
}
}

А я целую ночь тр... еб... программированием на WinAPI занимался.
 
Ответ: Если есть вопросы по скриптам

Подскажите как выделенные объекты равномерны распределить по вертикали?
наверное плохо искал, но никак не могу найти аналог окошка Align/Distribute
 
Ответ: Если есть вопросы по скриптам

Реализовал программно. но хотелось бы все-таки знать есть ли подобная команда?
 
Ответ: Если есть вопросы по скриптам

Cedar сказал(а):
Реализовал программно. но хотелось бы все-таки знать есть ли подобная команда?

Document.align (alignDistributeItems: array of PageItem, alignOption: AlignOptions, alignDistributeBounds: AlignDistributeBounds)
Align page items.

alignDistributeItems: Data Type: array of PageItem
The page items to align or distribute.
alignOption: Data Type: AlignOptions
The type of alignment to apply.
alignDistributeBounds: Data Type: AlignDistributeBounds
The bounds within which to align or distribute the page items. (Optional)
 
Ответ: Если есть вопросы по скриптам

Кто может помочь?
Нужен скрипт который находит абзац с определенным стилем и индексирует его.
Затем переходит к следующему за ним абзацу и применяет другой стиль
и так до конца документа
начал писать но не нашел как перейти к след абзацу и как добавить найденный абзац в индех
помогите кто может

with (app) {
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;

app.findTextPreferences.appliedParagraphStyle = "ФИО";
app.documents.item(0).findText();



/*Clear the find/change preferences after the search.*/
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing
 
Ответ: Если есть вопросы по скриптам

Ig1971 сказал(а):
...но не нашел как перейти к след абзацу...
PHP:
myNextparagraph = myStory.paragraphs.nextItem(myParagraph);
 
Статус
Закрыто для дальнейших ответов.