it works. thank you Bernard! one last question -- how do I get the libraries to "refresh"? when I make a change to the libraries, sometimes it's visible immediately, and some times I need to close OpenOffice and re-open it in order to make sure that the new code is running. is there a better way to refresh the libs?
thanks, Igal Sapir Lucee Core Developer Lucee.org <http://lucee.org/> On 3/15/2015 7:21 AM, Bernard Marcelly wrote: > Sorry, correction of my correction... > > if the JavaScript script is in My Macros the location becomes user > > oDocScriptProvider.getScript("vnd.sun.star.script:Library1.ExistsTerm.js?language=JavaScript&location=user") > > > The URI spec of the Scripting Framework is somewhat complex... > <https://wiki.openoffice.org/wiki/Documentation/DevGuide/Scripting/Scripting_Framework_URI_Specification> > > >> >> Bernard Marcelly a écrit le 2015-03-15 14:56 : >>>> On 3/13/2015 6:09 AM, Bernard Marcelly wrote: >>>> - Create in your document a JavaScript library named Library1 >>> >>> You created the macro in OpenOffice application (My Macros), not in >>> the document. >>> >>> If you really want to have your macro in My Macros, you have to >>> change the call >>> to the macro: >>> oDocScriptProvider.getScript("vnd.sun.star.script:Library1.ExistsTerm.js?language=JavaScript&location=share") >>> >>> >>> >>> The location is changed from "document" to "share" >>> >>>> when I enter into a cell =contains("abc", "b") I get Err:508 >>> In a Calc function, arguments are separated by ; instead of , >>> >>> Reminder : your Basic function contains() must be in the Standard >>> library of >>> your document. Not in the Standard library of My Macros (getting the >>> Script >>> Provider would be different). >>> >>> Bernard >>> >>> >>> Igal @ Lucee.org a écrit le 2015-03-14 23:43 : >>>> hi Bernard, >>>> >>>> thank you for your reply. I created a javascript library named >>>> "JSLib1" and in >>>> it a macro named "StringContains", and I placed in it your example >>>> JS code. >>>> >>>> >>>> >>>> then in OpenOffice Basic Macros I have the module "Module1". you >>>> can see the >>>> code at >>>> https://gist.github.com/TwentyOneSolutions/38f38c1ebf99a85b6da5 >>>> >>>> when I enter into a cell =getScriptVersion() I see the expected >>>> value of 1.04 >>>> >>>> when I enter into a cell =contains("abc", "b") I get Err:508 which >>>> according to >>>> https://wiki.openoffice.org/wiki/Calc_Error_Codes means that a >>>> parenthesis is >>>> not closed properly. >>>> >>>> trying to call the macro TestJsCall shows the following error: >>>> >>>> >>>> >>>> Macro Library JSLib1 not found, which seems to be different from >>>> Err:508. >>>> >>>> what am I missing? >>>> >>>> thanks again, >>>> >>>> Igal Sapir >>>> Lucee Core Developer >>>> Lucee.org <http://lucee.org/> >>>> >>>> On 3/13/2015 6:09 AM, Bernard Marcelly wrote: >>>>> Hi, >>>>> >>>>> If you intend to use a JavaScript function in a cell formula, >>>>> forget about it. >>>>> First, you cannot directly call a JavaScript function from a cell >>>>> formula. The >>>>> formula should call a Basic function that calls the JavaScript >>>>> function. >>>>> Second, the formula will provide an error at document loading, >>>>> because at this >>>>> instant the script library is not yet accessible. >>>>> _____________ >>>>> >>>>> If you want to use a JavaScript function from a Basic macro, you >>>>> have to use >>>>> the script provider. >>>>> >>>>> Suppose you want to create function ExistsTerm(arg1, arg2) in >>>>> JavaScript. >>>>> >>>>> - Create in your document a JavaScript library named Library1 >>>>> - Then create a JavaScript module named : ExistsTerm >>>>> - Edit this module : replace all the lines by this line: >>>>> ARGUMENTS[0].indexOf(ARGUMENTS[1]) > -1; >>>>> Explanations: >>>>> - The name of the function is the name of the module. >>>>> - ARGUMENTS is an array of all the arguments. >>>>> - The result of the function is by default the last evaluation. >>>>> >>>>> Here is a Basic macro that uses the JavaScript function. >>>>> Attention, the email >>>>> has split long lines. >>>>> >>>>> Sub Main3 >>>>> Dim oDocScriptProvider As Object, oScript As Object >>>>> Dim result As Variant >>>>> >>>>> oDocScriptProvider = ThisComponent.getScriptProvider() >>>>> oScript = >>>>> oDocScriptProvider.getScript("vnd.sun.star.script:Library1.ExistsTerm.js?language=JavaScript&location=document") >>>>> >>>>> >>>>> >>>>> result = oScript.invoke(Array("Apache OpenOffice is the best", >>>>> "OpenOffice"), >>>>> Array(), Array()) >>>>> MsgBox("Term exists : " & result) >>>>> End Sub >>>>> >>>>> The Scripting Framework is described in the Developer's Guide >>>>> <https://wiki.openoffice.org/wiki/Documentation/DevGuide/Scripting/Scripting_Framework> >>>>> >>>>> >>>>> >>>>> >>>>> The arguments of the invoke method is described in >>>>> <https://www.openoffice.org/api/docs/common/ref/com/sun/star/script/XInvocation.html#invoke> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> Igal @ Lucee.org a écrit le 2015-03-13 06:50 : >>>>>> Hi all, >>>>>> >>>>>> I want to write a simple function to be used in OpenOffice Calc. >>>>>> >>>>>> It would return true if the cell's value contains a substring, e.g. >>>>>> >>>>>> |function contains(string, substring) { >>>>>> >>>>>> return (string.indexOf(substring) > -1); >>>>>> }| >>>>>> >>>>>> But I can't find any documentation or examples on that. >>>>>> >>>>>> Any ideas? >>>>>> >>>>>> TIA >>>>>> >>>>>> p.s. this is a crosspost with >>>>>> http://stackoverflow.com/questions/29025195/openoffice-calc-javascript-function >>>>>> >>>>>> >>>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org >>>>> For additional commands, e-mail: api-h...@openoffice.apache.org >>>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org >>> For additional commands, e-mail: api-h...@openoffice.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org >> For additional commands, e-mail: api-h...@openoffice.apache.org >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: api-unsubscr...@openoffice.apache.org > For additional commands, e-mail: api-h...@openoffice.apache.org >