[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);

Подскажите, пожалуйста, в чем ошибка?
 
Судя по тому, что писали тут об этой книге, ошибка может быть во всем, чем угодно.
Чтобы не играть в веселую угадайку, может сразу признаетесь, какую ошибку индизайн выдает и выдает ли вообще?
 
Судя по тому, что писали тут об этой книге, ошибка может быть во всем, чем угодно.
Чтобы не играть в веселую угадайку, может сразу признаетесь, какую ошибку индизайн выдает и выдает ли вообще?
В 31 строке выдает "нет определения myTable" при пошаговом исполнении с if сразу перескакивает на эту строку, хотя курсор стоит во фрейме...
 
подправил чуток кусок
Код:
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]});
 
подправил чуток кусок
Код:
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++) {
 
Но в этом случае, опять выдает ошибку: "нет определения myTable" , на этот раз в 20 строке -
Ну так вы, вероятно, убрали строку
myTable = curr_para.tables [0];
Вообще говоря, не обижайтесь, но обучать вас скриптингу дистанционно - это все равно что обучать по телефону дворника из Средней Азии водить самолет по дореволюционному кулинарному справочнику. 'otbline''fp'

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

ЗЫ: Строку
myTable.headerRowCount = 1; по всей логике тоже имеет смысл поменять местами с предыдущей, потому как следующий раз может ругаться именно на нее. Такое ощущение, что автора книги самого кто-то примерно так же обучал. ;)
Перед строкой myTable.headerRowCount = 1; стоит закрывающая фигурная скобка ... А ругается на следующую строку, причем в обоих вариантах, т.е. если она расположена после myTable.headerRowCount = 1; или перед ней... Ругается что curr_para.applyStyle не является функцией.
 
Перед строкой myTable.headerRowCount = 1; стоит закрывающая фигурная скобка ...
Вот с этой фигурной скобкой и надо менять местами а не со следующей.
Сакральный смысл сего действия:
В данном гуанокоде переменная myTable объявляется и инициализируется внутри блока if (mySelection.constructor.name == "InsertionPoint"...
А строка myTable.headerRowCount = 1; стоит вне этого блока. Для того, чтобы счастье наступило, ее как минимум, внутрь блока внести надо. Я понятно излагаю? Кнопочка спасибо теперь в нижнем правом углу, палец вверх, не перепутайте.
 
Вот с этой фигурной скобкой и надо менять местами а не со следующей.
Сакральный смысл сего действия:
В данном гуанокоде переменная myTable объявляется и инициализируется внутри блока if (mySelection.constructor.name == "InsertionPoint"...
А строка myTable.headerRowCount = 1; стоит вне этого блока. Для того, чтобы счастье наступило, ее как минимум, внутрь блока внести надо. Я понятно излагаю? Кнопочка спасибо теперь в нижнем правом углу, палец вверх, не перепутайте.
Спасибо. Ваше чувство юмора было бы замечательным, если бы вы не перебарщивали с сарказмом (такое слово вам знакомо?). Так что же делать с ругачкой на строку curr_para.applyStyle (... ?
 
Так что же делать с ругачкой на строку curr_para.applyStyle (... ?
Это ошибка уже другого рода. И снова возможны варианты
1) В вашем выделении параграфов нет вообще, в этом случае curr_para ссылается вникуда и никакой стиль к нему применить нельзя.
2) У вас локализованный ID со всеми вытекающими - все названия отличаются от нормального человеческого индизайна.
3) Ошибка где то еще в данной строке
...
И вообще я не совсем пойму, а нужна ли вам эта строка вообще? В этот пример, на мой взгляд, она вообще была скопирована совершенно случайно.
 
Код:
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?

Код фу-фу-фу, неаккуратный.
 
Последнее редактирование:
Сейчас внимательно глянул, curr_para по любому непустой, так что пункт 1 можно смело исключить.
 
И, ага, .applyStyle — это очень хорошо.
.applyParagraphStyle
Исправил, но все равно на эту строку ругается, что объект не может поддерживать свойство или метод "undefined". Я вообще не понимаю, для чего автор включил в код эту строку? Без нее таблица создается.
 
автор Михаил Борисов помоему, для CS3 книжка была, единственная на русском
 
Статус
Закрыто для дальнейших ответов.