[ID CS4-CS6] Не получается создать таблицу

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

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
В очередной раз столкнулся с неработающим кодом из книги М.Борисова "Скрипты в InDesign" (Создание таблицы) :
Код:
myDocument = app.activeDocument;
mySelection = myDocument.selection[0];
curr_para = mySelection.paragraphs[0];
myParagraphStyles = myDocument.paragraphStyles;
pars = mySelection.paragraphs;
parStylesTempArray = [];
for (i=2; i<myParagraphStyles.length; i++) {
    switch(myParagraphStyles[i].name){
        case 'Normal' :
        parStylesTempArray['Normal'] = i;
        break;
        }
    }
if (mySelection.constructor.name == "InsertionPoint" || mySelection.constructor.name == "Paragraph") {
    curr_para.tables.add ({columnCount:2, bodyRowCount:1, height:"50 mm", width: mySelection.textFrames [0].geometricBounds[3] - mySelection.textFrames [0].geometricBounds[1] });
    myTable = curr_para.tables [0];
    for (i=0; i< myTable.cells.length; i++) {
        with (myTable.cells [i]) {
            topInset = "1 mm"
            bottomInset = "1 mm"
            rightInset = "1 mm"
            leftInset = "1 mm"
           
            leftEdgeStrokeWeight = "0.5 pt"
            topEdgeStrokeWeight = "0.5 pt"
            bottomEdgeStrokeWeight = "0.5 pt"
            rightEdgeStrokeWeight = "0.5 pt"
            }
        }
    }
myTable.headerRowCount = 1;
curr_para.applyStyle (myParagraphStyles[parStylesTempArray['Normal']], true);

Подскажите, пожалуйста, в чем ошибка?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Судя по тому, что писали тут об этой книге, ошибка может быть во всем, чем угодно.
Чтобы не играть в веселую угадайку, может сразу признаетесь, какую ошибку индизайн выдает и выдает ли вообще?
 

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Судя по тому, что писали тут об этой книге, ошибка может быть во всем, чем угодно.
Чтобы не играть в веселую угадайку, может сразу признаетесь, какую ошибку индизайн выдает и выдает ли вообще?
В 31 строке выдает "нет определения myTable" при пошаговом исполнении с if сразу перескакивает на эту строку, хотя курсор стоит во фрейме...
 

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
подправил чуток кусок
Код:
if (mySelection.constructor.name == "InsertionPoint" || mySelection.constructor.name == "Paragraph") {
    mySelection.tables.add ({
        columnCount:2,
        bodyRowCount:1,
        height:"50 mm",
        width: mySelection.parentTextFrames[0].geometricBounds[3] - mySelection.parentTextFrames[0].geometricBounds[1]});
 

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
подправил чуток кусок
Код:
if (mySelection.constructor.name == "InsertionPoint" || mySelection.constructor.name == "Paragraph") {
    mySelection.tables.add ({
        columnCount:2,
        bodyRowCount:1,
        height:"50 mm",
        width: mySelection.parentTextFrames[0].geometricBounds[3] - mySelection.parentTextFrames[0].geometricBounds[1]});
Спасибо. Я так понял, этот кусок вставляется вместо строк 14-16 ? Но в этом случае, опять выдает ошибку: "нет определения myTable" , на этот раз в 20 строке -
Код:
for (i=0; i< myTable.cells.length; i++) {
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Но в этом случае, опять выдает ошибку: "нет определения myTable" , на этот раз в 20 строке -
Ну так вы, вероятно, убрали строку
myTable = curr_para.tables [0];
Вообще говоря, не обижайтесь, но обучать вас скриптингу дистанционно - это все равно что обучать по телефону дворника из Средней Азии водить самолет по дореволюционному кулинарному справочнику. 'otbline''fp'

ЗЫ: Строку
myTable.headerRowCount = 1; по всей логике тоже имеет смысл поменять местами с предыдущей, потому как следующий раз может ругаться именно на нее. Такое ощущение, что автора книги самого кто-то примерно так же обучал. ;)
 

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Ну так вы, вероятно, убрали строку
myTable = curr_para.tables [0];
Точно! Спасибо. Невнимательность ...
Вообще говоря, не обижайтесь, но обучать вас скриптингу дистанционно - это все равно что обучать по телефону дворника из Средней Азии водить самолет по дореволюционному кулинарному справочнику. 'otbline''fp'

ЗЫ: Строку
myTable.headerRowCount = 1; по всей логике тоже имеет смысл поменять местами с предыдущей, потому как следующий раз может ругаться именно на нее. Такое ощущение, что автора книги самого кто-то примерно так же обучал. ;)
Перед строкой myTable.headerRowCount = 1; стоит закрывающая фигурная скобка ... А ругается на следующую строку, причем в обоих вариантах, т.е. если она расположена после myTable.headerRowCount = 1; или перед ней... Ругается что curr_para.applyStyle не является функцией.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Перед строкой myTable.headerRowCount = 1; стоит закрывающая фигурная скобка ...
Вот с этой фигурной скобкой и надо менять местами а не со следующей.
Сакральный смысл сего действия:
В данном гуанокоде переменная myTable объявляется и инициализируется внутри блока if (mySelection.constructor.name == "InsertionPoint"...
А строка myTable.headerRowCount = 1; стоит вне этого блока. Для того, чтобы счастье наступило, ее как минимум, внутрь блока внести надо. Я понятно излагаю? Кнопочка спасибо теперь в нижнем правом углу, палец вверх, не перепутайте.
 

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
Вот с этой фигурной скобкой и надо менять местами а не со следующей.
Сакральный смысл сего действия:
В данном гуанокоде переменная myTable объявляется и инициализируется внутри блока if (mySelection.constructor.name == "InsertionPoint"...
А строка myTable.headerRowCount = 1; стоит вне этого блока. Для того, чтобы счастье наступило, ее как минимум, внутрь блока внести надо. Я понятно излагаю? Кнопочка спасибо теперь в нижнем правом углу, палец вверх, не перепутайте.
Спасибо. Ваше чувство юмора было бы замечательным, если бы вы не перебарщивали с сарказмом (такое слово вам знакомо?). Так что же делать с ругачкой на строку curr_para.applyStyle (... ?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Так что же делать с ругачкой на строку curr_para.applyStyle (... ?
Это ошибка уже другого рода. И снова возможны варианты
1) В вашем выделении параграфов нет вообще, в этом случае curr_para ссылается вникуда и никакой стиль к нему применить нельзя.
2) У вас локализованный ID со всеми вытекающими - все названия отличаются от нормального человеческого индизайна.
3) Ошибка где то еще в данной строке
...
И вообще я не совсем пойму, а нужна ли вам эта строка вообще? В этот пример, на мой взгляд, она вообще была скопирована совершенно случайно.
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Код:
myDocument = app.activeDocument;
mySelection = myDocument.selection[0];
curr_para = mySelection.paragraphs[0];
myParagraphStyles = myDocument.paragraphStyles;
pars = mySelection.paragraphs;
parStylesTempArray = [];
for (i=2; i<myParagraphStyles.length; i++) {
    switch(myParagraphStyles[i].name){
        case 'Normal' :
        parStylesTempArray['Normal'] = i;
        break;
        }
    }
if (mySelection.constructor.name == "InsertionPoint" || mySelection.constructor.name == "Paragraph") {
    var width = mySelection.parentTextFrames[0].geometricBounds[3] - mySelection.parentTextFrames[0].geometricBounds[1];
    curr_para.tables.add ({
        columnCount:2,
        bodyRowCount:1,
        height:"50 mm",
        width: width
        });
    myTable = curr_para.tables [0];
    for (i=0; i< myTable.cells.length; i++) {
        with (myTable.cells [i]) {
            topInset = "1 mm"
            bottomInset = "1 mm"
            rightInset = "1 mm"
            leftInset = "1 mm"
         
            leftEdgeStrokeWeight = "0.5 pt"
            topEdgeStrokeWeight = "0.5 pt"
            bottomEdgeStrokeWeight = "0.5 pt"
            rightEdgeStrokeWeight = "0.5 pt"
            }
        }
    }
myTable.headerRowCount = 1;
curr_para.applyParagraphStyle (myParagraphStyles[parStylesTempArray['Normal']], true);

Какой [...] .textFrames??? Когда там должно быть .parentTextFrames?

Код фу-фу-фу, неаккуратный.
 
Последнее редактирование:

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Сейчас внимательно глянул, curr_para по любому непустой, так что пункт 1 можно смело исключить.
 

Сергий Задонский

Участник
Топикстартер
Сообщения
251
Реакции
4
И, ага, .applyStyle — это очень хорошо.
.applyParagraphStyle
Исправил, но все равно на эту строку ругается, что объект не может поддерживать свойство или метод "undefined". Я вообще не понимаю, для чего автор включил в код эту строку? Без нее таблица создается.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835

azz

alexey
15 лет на форуме
Сообщения
711
Реакции
359
автор Михаил Борисов помоему, для CS3 книжка была, единственная на русском
 
Статус
Закрыто для дальнейших ответов.