Обработка таблиц скриптом

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

pechenushka

Участник
Топикстартер
Сообщения
47
Реакции
0
Товарищи, подскажите, плиз, как оптимизировать скрипт для обработки таблиц в инди. Он у меня обрабатывает каждую ячейку отдельно. А я вот думаю, как сделать, чтоб он сразу всю таблицу обратотал. Применить стиль к тексту в табл.; нарисовать линии; отступы внутри ячейки поставить и высоту ячейки - вот его работа. Возможно ли сделать как я хочу?
Могу послать его код
 
Ответ: Обработка таблиц скриптом

pechenushka сказал(а):
Возможно ли сделать как я хочу?
В VB и JS к сожалению нельзя.
 
Ответ: Обработка таблиц скриптом

Сделать это можно!
Только нужно выделят не всю таблицу,
а какую-то часть. Тогда эта часть таблицы
имеет тип переменной Cell и с ней можно
работать как с одной ячейкой.

Я обрабатываю таблицу в два приема:
1. Вся таблица без последней строки.
2. Последняя строка.

Удачи.
 
Ответ: Обработка таблиц скриптом

Хм. А как вашим методом за один раз обработать все таблицы в публикации?
 
Ответ: Обработка таблиц скриптом

Циклом.
Все Stories.
В каждом Story все Tables.
И каждую таблицу в два приема.

Достаточно быстро!
 
Ответ: Обработка таблиц скриптом

Да с циклом-то понятно...
Но не получается почему-то у меня...
Определяю переменную как itemByrange ячеек, а дальше с ней ничего сделать не могу - чтоб не делал, как с обычной ячейкой, - ошибка.
 
Ответ: Обработка таблиц скриптом

Все, разобрался! Большое спасибо за идею!!!
 
Ответ: Обработка таблиц скриптом

За спасибо, спасибо.
Рад, что идея пригодилась.
Вдогонку вопрос.

Я получаю кусок таблицы его выделением и чтением свойства Selection

Set myTables = myStory.Tables

For t = 1 To myTables.Count
Set myTable = myTables.Item(t)


Set myRows = myTable.Rows

Set myCellStart = myTable.Cells(1)
Set myCellEnd = myRows.Item(myRows.Count - 1).Cells.LastItem

myRows(1).Select 1919250519
myRows(myRows.Count - 1).Select 1633969202

Set mySelect2 = myDocument.Selection(1)
mySelect2.LeftEdgeStrokeWeight = l
mySelect2.RightEdgeStrokeWeight = l
mySelect2.TopEdgeStrokeWeight = l
mySelect2.BottomEdgeStrokeWeight = l
mySelect2.InnerRowStrokeWeight = l
mySelect2.InnerColumnStrokeWeight = l

rem Последняя строка
Set myRowEnd = myTable.Rows.LastItem
Set myCellStart = myRowEnd.Cells(1)
Set myCellEnd = myRowEnd.Cells.LastItem

myRows.LastItem.Select 1919250519

Set mySelect2 = myDocument.Selection(1)
mySelect2.LeftEdgeStrokeWeight = l
mySelect2.RightEdgeStrokeWeight = l
mySelect2.TopEdgeStrokeWeight = l
mySelect2.BottomEdgeStrokeWeight = l
mySelect2.InnerRowStrokeWeight = l
mySelect2.InnerColumnStrokeWeight = l

Next

Может кто знает другой способ, красивее и быстрее?
 
Ответ: Обработка таблиц скриптом

Немного проще так:
PHP:
Set myTableCell = myTable.Cells.ItemByRange(myCellStart,myCellEnd)	
myDocument.Selection = myTableCell
Set myCell = myDocument.Selection
 
Ответ: Обработка таблиц скриптом

В продолжение темы:
Может, конечно, к ночи голова не соображает, но не могу тексту стиль присвоить...
PHP:
Set myText = myCell.Item(1).Texts.Item(1)
myText.AppliedParagraphStyle = "_tabl_text"
Так почему-то не работает, почему не пойму.
 
Ответ: Обработка таблиц скриптом

А если так?
PHP:
Set myText = myCell.Item(1).Paragraphs.Item(1)
myText.AppliedParagraphStyle = "_tabl_text"
 
Ответ: Обработка таблиц скриптом

ragman сказал(а):
И так тоже не работает *(
Я вообще сомневаюсь, что это возможно...
 
Ответ: Обработка таблиц скриптом

Странно…
У меня для объекта aCell типа Cell, полученнного методом itemByRange (большое спасибо за подсказку MT), отлично работает присваивание типа:
PHP:
aCell.paragraphs[0].appliedParagraphStyle = "cTables_small_center"
Причем перебирать все абзацы не надо, достаточно именно первого.
Тут есть одна особенность: если в ячейке нет текста, то стиль абзаца не присваивается.
И еще. Я получил объект типа Cell для всех ячеек таблицы:
PHP:
newTable.cells.itemByRange(newTable.cells.firstItem(), newTable.cells.lastItem())
 
Ответ: Обработка таблиц скриптом

Уважаемый Kaatm!

Я рад что у вас работает.
Но то что вы написали

PHP код:
newTable.cells.itemByRange(newTable.cells.firstItem(), newTable.cells.lastItem())

не работает у меня.
Ведь свойство itemByRange возвращает список ячеек Cells,
а нам надо получить объект Cell.

А может я не понял чего...
 
Ответ: Обработка таблиц скриптом

Значица так...
Со своей проблемой (см. выше) разобрался, нужно делать так:
PHP:
Set myText = myCell.Item(1).Paragraphs.Item(1) 
myText.Item(1).AppliedParagraphStyle = "_tabl_text"
Но толку от этого никакого, т.к. стиль присваивается тексту только в первой ячейке таблицы, а ко всему выделению присвоить не получается. Так что придется по-старинке - в цикле, каждой ячейке.

to kaatm
kaatm сказал(а):
И еще. Я получил объект типа Cell для всех ячеек таблицы:
PHP:
newTable.cells.itemByRange(newTable.cells.firstItem(), newTable.cells.lastItem())
Это вам так кажется, что вы его получили... На самом деле это фикция, вы получили объект - Таблица. И оформить ее вышеуказанными методами не получится.
 
Ответ: Обработка таблиц скриптом

sakhar сказал(а):
Значица так...
Со своей проблемой (см. выше) разобрался, нужно делать так:
PHP:
Set myText = myCell.Item(1).Paragraphs.Item(1) 
myText.Item(1).AppliedParagraphStyle = "_tabl_text"
Странно это как-то....
myText должна содержать первый параграф первой ячейки (стр. 1). Тогда вторая строка присваивает стиль параграфа первому символу этого параграфа. Оно конечно будет работать, но как-то... через... вобщем не логично.

зы: Посмотрел что я тут написал и вообще запутался. Item() определяет конкретный член какой либо коллекции (массива). Но myText содержит ссылку на единственный элемент - Paragraph. Что же тогда возвращает второй Item()?
 
Ответ: Обработка таблиц скриптом

myText в данном случае содержит ВСЕ параграфы объединенной ячейки! (строка 1.)
Вторая строка присваивает стиль первому ПАРАГРАФУ объединенной ячейки.
А второй Item(2) соответственно возвращает второй параграф...
 
Ответ: Обработка таблиц скриптом

sakhar сказал(а):
to kaatm
Это вам так кажется, что вы его получили... На самом деле это фикция, вы получили объект - Таблица. И оформить ее вышеуказанными методами не получится.
Тогда объясните, пожалуйста, почему у меня работает этот фрагмент:
PHP:
var newSelection = newTable.cells.itemByRange(newTable.cells.firstItem(), 
	newTable.cells.lastItem());

with (newSelection){
	topInset = "1pt";
	bottomInset = "1pt";
	leftInset = "1pt";
	rightInset = "1pt";
	topEdgeStrokeWeight = "0.5pt";
	bottomEdgeStrokeWeight = "0.5pt";
	leftEdgeStrokeWeight = "0.5pt";
	rightEdgeStrokeWeight = "0.5pt";
	diagonalLineStrokeWeight = "0.5pt";
	innerColumnStrokeWeight = "0.5pt";
	innerRowStrokeWeight = "0.5pt";
	paragraphs[0].appliedParagraphStyle = "cTables_small_center";
}
 
Ответ: Обработка таблиц скриптом

Работать-то он работает, но ничего не делает!
Попробуйте перед запуском скрипта "испортить" таблицу - сделайте отступы в ячейках 2 pt, поставьте толщину линеек 2 пункта, присвойте тексту другой стиль. И запустите скрипт.
И если после его работы у вас в этой таблице отступы стали равны 1pt, толщина линеек 0,5pt, то значит вы совершили революцию в скриптописании для ID CS2!!!
 
Ответ: Обработка таблиц скриптом

MT сказал(а):
Сделать это можно!
Только нужно выделят не всю таблицу,
а какую-то часть. Тогда эта часть таблицы
имеет тип переменной Cell и с ней можно
работать как с одной ячейкой.

Я обрабатываю таблицу в два приема:
1. Вся таблица без последней строки.
2. Последняя строка.

Удачи.

Дело в том, что я выделяю фрейм с табл. инструментом "стрелка", а если выделять табл. инструм. "текст", то скрипт не работает...
А вообще в одном фрейме таблиц. целая туча, вот я и задался решением этой проблемы
 
Статус
Закрыто для дальнейших ответов.