[ID CC-CC2021] Можно ли передать параметр jsx-скрипту из VBA

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
В яве вызывал скрипт и передавал ему параметр mStory.
Из VBA вызывать-то скрипт можно, но параметр уже теряется.
Не хотелось бы переписывать вызываемый скрипт на VBA. И долго, и придется следить за идентичностью обоих вариантов.
В Java было так:
Код:
var mScript = File("d:/Work/123.jsx");
app.doScript(mScript, ScriptLanguage.JAVASCRIPT, [mStory], UndoModes.FAST_ENTIRE_SCRIPT, 'proc');

В VBA:
Код:
myJavaScriptString = "var mScript = File(""d:/Work/123.jsx"");app.doScript(mScript, ScriptLanguage.JAVASCRIPT, [mStory], UndoModes.FAST_ENTIRE_SCRIPT, 'proc');"
MyValue = myInd.DoScript(myJavaScriptString, idScriptLanguage.idJavascript)
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
А зачем обязательно Story передавать? Может, все таки попроще как то можно, через id, name или label?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 989
Реакции
1 213
Я что-то вообще не понимаю этого двойного вызова одной строки.
 

_MBK_

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

hulk1776

Топикстартер
15 лет на форуме
Сообщения
725
Реакции
21
Выкрутился так (если переменная не определена, то определяем ее заново):
Код:
if (typeof mStory == "undefined") {
    if(app.selection[0].constructor.name == "TextFrame"){
    var myFrame = app.selection[0];
    mStory = app.selection[0].parentStory;
    }else if (app.selection[0].constructor.name == "InsertionPoint"){
    mStory = app.selection[0].insertionPoints[0].parentStory;
    var myFrame = app.selection[0].parentTextFrames[0];
    }else{ // если выделен только текст
    mStory = app.selection[0];
    }
}
А в VBA выкинул эту переменную
Код:
myJavaScriptString = "var mScript = File(""d:/Work/Dropbox/MGUA/Backups/scripts/chistka.jsx"");app.doScript(mScript);"
MyValue = myInd.DoScript(myJavaScriptString, idScriptLanguage.idJavascript)

А зачем обязательно Story передавать? Может, все таки попроще как то можно, через id, name или label?
Story удобна тем, что данным скриптом можно почистить или весь текст во фрейме или только выделенный фрагмент. Например, в случае, если есть какой-то небольшой текст с обилием вордовской "грязи" типа лишних пробелов и пр. Такое как правило бывает в текстах листовок, благодарственного письма и пр. мелких доков.
Кроме того, пока VBA-пакет отлаживается, надо иметь возможно запусков и через панель скриптов. А там параметр Story передается, ессно, как надо.
 
Последнее редактирование: