Помогите написать скрипт

Статус
Закрыто для дальнейших ответов.

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

.. так, ну вобщем все остановилось :(
тогда попробую по другому, буду писать так как я понял, а то что я неправильно понял надеюсь мне кто-нибудь объяснит
я так понимаю что перед тем как искать надо объявить все переменные
PHP:
var myFindText = "text"
var tab = selection[0].tables[0];
var myCell = selection[0].tables[0].rows[0].cells
var myCellText = selection[0].tables[0].rows[0].cells[0].contents;

но насколько я понимаю я объявляю только самую первую клетку в самой первой строке
так?
и потом для того что бы начать поиск мне надо будет сделать цикл и заменить ноль на переменную которая будет увеличиваться при каждом круге на единицу, и тогда поиск пройдет по всей таблице
так?
тогда наверное две последние переменные получается не нужны?

и следующее
PHP:
myCell.fillColor = activeDocument.swatches.item("Цвет")

ID говорит что это бурда
из его сообщения я понимаю что объект Cell не поддерживает метод fillColor
наверное fillColor это тоже объект а что тогда будет методом?
надеюсь что мои вопросы не покажутся вам совсем примитивными и вы найдете пару минут на то что бы мне ответить потому как иначе мое изучение скриптов затянется на неопределенный срок :(
 

Glutton

12 лет на форуме
Сообщения
885
Реакции
1
Ответ: Помогите написать скрипт

var myCell = selection[0].tables[0].rows[0].cells[0]
myCell.fillColor = activeDocument.swatches.item("Цвет")
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

...нда.....ступил :) ..спасибо
тогда следующее
я думаю так
этот цикл пройдется по первой строке таблицы и остановится
PHP:
for (i = 0; i < selection[0].tables[0].rows[0].cells.length; i++) {
	if (selection[0].tables[0].rows[0].cells[i].contents == myFindText) {
		selection[0].tables[0].rows[0].cells[i].fillColor = activeDocument.swatches.item("Цвет");
			}
		}
будет это работать?
что бы цикл прошелся по всей таблице надо встраивать еще один цикл для rows?
 

ragman

12 лет на форуме
Сообщения
669
Реакции
0
Ответ: Помогите написать скрипт

Bardak сказал(а):
что бы цикл прошелся по всей таблице надо встраивать еще один цикл для rows?
Собственно говоря, да.
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

Вот именно этого у меня пока и не получается сделать :(

PHP:
for (a = 0; a < selection[0].tables[0].rows.cells.length; a++) {
	for (i = 0; i < selection[0].tables[0].rows[a].cells.length; i++) {
    	if (selection[0].tables[0].rows[a].cells[i].contents == myFindText) {
        	selection[0].tables[0].rows[a].cells[i].fillColor = activeDocument.swatches.item("Цвет");
            }
        } 
	}
}
как должно быть правильно?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Ответ: Помогите написать скрипт

selection[0].tables[0].rows[?].cells.length
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

:)
спасибо :)
я как раз в этот же момент сам додумался :) поспешил исправится но не успел
но все равно спасибо, наверняка это кому-нибудь будет полезно

Теперь у меня задача следующая, myFindText мне надо сделать массивом
Чтобы скрипт перебирал массив наверное надо сделать еще один цикл?
сейчас подумаю и напишу что получилось
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

ну вот с этим слава богу справился быстро
PHP:
var myFindText =new Array ("text", "text1")

for (a = 0; a < selection[0].tables[0].rows.length; a++) {
	for (i = 0; i < selection[0].tables[0].rows[a].cells.length; i++) {
    	for (r = 0; r < myFindText.length; r++) {
    		if (selection[0].tables[0].rows[a].cells[i].contents == myFindText[r]) {
        		selection[0].tables[0].rows[a].cells[i].fillColor = activeDocument.swatches.item("Цвет");
            	}
        	} 
		}
	}
}
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Ответ: Помогите написать скрипт

Ой, чего-то я все в толк не возьму, что за скрипт, для чего он такой?..
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

Ну я же писал...
Это будет большой скрипт, а то что я сейчас делаю это куски от него
конкретно этот кусок будет закрашивать в таблице клетки в которых будут заголовки разделов таблиц...
ну например таблица, в ней начинается раздел
"1. Центральный федеральный округ" следующая строка
"1.1. Белгородская область" (вот эти строки мне надо выделить цветом)
а дальше идет перечисление цен на ГСМ
и так по всем нашим округам и областям
просто такого рода таблиц у меня три и они очень длинные и самое главное число строк все время меняется иначе я использовал бы SmartStyles
скрипт будет кстати

вполне возможно что все это можно решить как то попроще, но я пока смог только так
скрипт кстати буду усложнять...меня бы и эти куски устроили, но мне хочется поглубже изучить это дело
и наверное хотелось бы чтобы массив набирался из TXT файла... возможно это?
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

Подскажите пожалуйста как правильно будет изменить высоту этой ячейки?

нда....метод тыка он самый научный
selection[0].tables[0].rows[a].cells.height = 9
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

тогда следующее
как все таки забить массив содержимым из файла?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 216
Ответ: Помогите написать скрипт

Взять скрипт SmartClone.js и посмотреть, как читать содержимое из файла в массив. Что трудного в этом? В уже написанных скриптах как правило содержится много разнообразных решений.
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

вобщем взял ... посмотрел ... сделал
Код:
var fileTypes = "TXT files:*.TXT";
var myFile = File.openDialog(fileTypes)
var myRecords = new Array();
var myDelim = ";";
var myResult = myFile.open("r");
	if (!myResult) {
		alert (langCantOpen);
		exit();
	}
var myCounter = 0;
	do {
		var myString = myFile.readln();
		var myTemp = new Array();
		myTemp = myString.split(myDelim);
		myRecords[myCounter] = myTemp;
		myCounter++;
	} while (myFile.eof == false)
myFile.close();

на данный момент вопросы пока вроде исчерпаны
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

А что значит myFile.eof?
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

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

Glutton

12 лет на форуме
Сообщения
885
Реакции
1
Ответ: Помогите написать скрипт

Думай как можно это еще найти...
myFile.eof... EOF - end of file (конец файла)
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

немного переделал... так как все искомые словосочетания находятся в строках где только одна ячейка, убрал поиск по ячейкам и оставил поиск только по строкам... теперь стало реально дождаться конца работы скрипта (но все равно долго)
обнаружил еще одну фишку
скрипт не узнает те словосочетания в которых есть тире, например вот это "Московский НПЗ – Сибнефть" вот с этим я уже даже не знаю как бороться :(
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

Проблему решил
Файл ТХТ надо сохранять в Юникод
 

Bardak

Участник
Топикстартер
Сообщения
44
Реакции
0
Ответ: Помогите написать скрипт

А как сделать то же самое
selection[0].tables[0].rows.height = 2,5;
но с параметром exactly?
 
Статус
Закрыто для дальнейших ответов.