Переведите в JS, пожалуйста, если не трудно.

  • Автор темы Автор темы hulk1776
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

hulk1776

Топикстартер
15 лет на форуме
Сообщения
738
Реакции
21
Вот есть такой код на VBS:
(обработка таблицы с присвоением кегля и гарнитуры)

Код:
'курсор в таблицу
Set MyInd = CreateObject("InDesign.Application.CS3")
MyInd.ScriptPreferences.EnableRedraw = False

Set myTable = MyInd.Selection.Item(1).Parent.Parent 

kk = myTable.Columns.Count ''колво колонок
CC = myTable.Cells.Count 'колво ячеек
With myTable
 Set mySelB = .Cells.ItemByRange(.Cells.Item(kk + 1), .Cells.Item(-1)).Item(-1) 'объявили выделением тело таблицы
 Set mySelH = .Cells.ItemByRange(.Cells.Item(1), .Cells.Item(kk)).Item(-1) 'объявили выделением только заголовок
End With

For i = 1 To CC 'по телу таблицы проходим
myTable.Cells.Item(i).Texts.Item(1).AppliedFont = MyInd.Fonts.Item("Arial")
myTable.Cells.Item(i).Texts.Item(1).PointSize = 9
myTable.Cells.Item(i).TopInset = 1
myTable.Cells.Item(i).BottomInset = 1
myTable.Cells.Item(i).LeftInset = 1
myTable.Cells.Item(i).RightInset = 1
Next

For i = 1 To kk 'по шапке таблицы
mySelH.Cells.Item(i).TopInset = 2
mySelH.Cells.Item(i).BottomInset = 2
mySelH.Cells.Item(i).LeftInset = 2
mySelH.Cells.Item(i).RightInset = 2
Next

On Error Resume Next 'т.к. при повторном присвоении стиля Header возникает ошибка
myTable.Rows.Item(1).RowType = idRowTypes.idHeaderRow
On Error GoTo 0
MyInd.ScriptPreferences.EnableRedraw = true

Выяснилось, что в VBS ограниченные возможности обработки диапазона (ItemByRange). И нужно заниматься перебором. А в JS есть.
Не подскажете, как это примерно могло бы выглядеть? Можно не все расписывать.

P.S. Я так понимаю, что циклы уже не нужны будут?
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

Писать для вас код, мне лениво, но могу показать кусок JS который присваивает всей таблице стиль символа и стиль ячейки:
Код:
with (myTables[i].cells.everyItem())
{appliedCellStyle = app.activeDocument.cellStyles.item('Cell Style 1');
texts.everyItem().appliedCharacterStyle = 
app.activeDocument.characterStyles.item('Body 9');}

myTables - таблица. То бишь объект типа Table.

Думаю вы легко приспособите этот код для своих нужд.
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

1. А зачем такой сценарий для ЦС3, если
все отступы можно задать в стиле ячейки.
Для ЦС2 это было актуально.

2. На VB можно сделать без перебора
в два приема: шапка и тело
В ЦС2 я делал так:

Код:
Set myRows = myTable.Rows

rem Тело
myRows(2).Select 1919250519
myRows(myRows.Count).Select 1633969202

Set mySelect = myDocument.Selection(1)
mySelect.TopInset = 1
mySelect.BottomInset = 1
mySelect.LeftInset = 1
mySelect.RightInset = 1


rem Шапка
myRows.FirstItem.Select 1919250519

Set mySelect = myDocument.Selection(1)
mySelect.TopInset = 2
mySelect.BottomInset = 2
mySelect.LeftInset = 2
mySelect.RightInset = 2
[
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

MT сказал(а):
1. А зачем такой сценарий для ЦС3, если
все отступы можно задать в стиле ячейки.
Для ЦС2 это было актуально.[

Если применять стиль, то либо отступы не меняются, т.к. без overriding'a, а если с ним, то отваливается форматирование текста в ячейке (что бессмыслено, т.к. потом придется его руками восстанавливать (в разных колонках разные типы выключки, а стиль сделает их все одинаковыми).
Поэтому логично менять только кегль и тип выключки в шапке. А все остальное оставлять как у автора.

А присваивать кегль, или тип выключки для нескольких ячеек нельзя.
Т.е. такие строчки выдают ошибку.
mySelect.AppliedFont = MyInd.Fonts.Item("Arial")
mySelect.PointSize = 9

Т.е. можно только для каждой Cell отдельно.

Попробую через JS. Но там морока с незнакомой среда отладки в ESTK - надо разбираться, где что запускается, искать где объектную модель смотреть ( 'hz' ).

Спасибо Specialist'у за подсказочку.
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

hulk1776 сказал(а):
Если применять стиль, то либо отступы не меняются, т.к. без overriding'a, а если с ним, то отваливается форматирование текста в ячейке (что бессмыслено, т.к. потом придется его руками восстанавливать (в разных колонках разные типы выключки, а стиль сделает их все одинаковыми).

Неправда. ;)

hulk1776 сказал(а):
Попробую через JS. Но там морока с незнакомой среда отладки в ESTK - надо разбираться, где что запускается, искать где объектную модель смотреть ( ).

А я ESTK не использую, чего и вам желаю. ;)
Объектную модель смотреть в Скриптинг Референс.


hulk1776 сказал(а):
Спасибо Specialist'у за подсказочку.

Могу и еще подсказать. Например, как сделать, чтобы форматирование в ячейках не сыпалось при применении стиля ячейки. Только сначала скажите как вы сделали, что оно сыпется. Надо делать как в аттаче:
 

Вложения

  • Untitled-1.gif
    Untitled-1.gif
    10.3 КБ · Просм.: 883
Ответ: Переведите в JS, пожалуйста, если не трудно.

А присваивать кегль, или тип выключки для нескольких ячеек нельзя.
Т.е. такие строчки выдают ошибку.
mySelect.AppliedFont = MyInd.Fonts.Item("Arial")
mySelect.PointSize = 9

И это правильно.
mySelect -- переменная типа Cell, поэтому свойств
AppliedFont и PointSize у нее просто нет.

У переменной типа Cell, есть свойство Texts -- массив,
каждый элемент которого (переменная типа Text) имеет
свойства AppliedFont и PointSize.
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

Specialist сказал(а):
А я ESTK не использую, чего и вам желаю. ;)
Объектную модель смотреть в Скриптинг Референс.
А в чем же пошагово прогонять? Я это делаю в VBA.


Specialist сказал(а):
Могу и еще подсказать. Например, как сделать, чтобы форматирование в ячейках не сыпалось при применении стиля ячейки. Только сначала скажите как вы сделали, что оно сыпется. Надо делать как в аттаче:
Через диалоговое окно форматированипе может и не посыпется, а через скрипт все летит к...
Ну ладно. Будем крутиться.
 
Ответ: Переведите в JS, пожалуйста, если не трудно.

hulk1776 сказал(а):
А в чем же пошагово прогонять? Я это делаю в VBA.

А нафиг?



hulk1776 сказал(а):
Через диалоговое окно форматированипе может и не посыпется, а через скрипт все летит к...

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