[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [libreoffice-users] Re: Calling a libreoffice basic function from a python script


On Tue, 2020-05-19 at 11:37 -0500, Jim wrote:
> On 5/18/20 8:20 PM, Mauricio Baeza wrote:
> > On Mon, 2020-05-18 at 20:00 -0500, Jim wrote:
> > > On 5/17/20 11:10 PM, Mauricio Baeza wrote:
> > > > On Sat, 2020-05-16 at 20:26 -0500, Jim wrote:
> > > > > I started experimenting with calling a basic function from a
> > > > > python
> > > > > script. I was surprised that without to much trouble I got it
> > > > > to
> > > > > work
> > > > > to
> > > > > a certain extent.
> > > > >
> > > > > I am working on linux Mint.
> > > > >
> > > > > I started with a basic Sub I found. In it's original form it
> > > > > had
> > > > > 3
> > > > > rgb
> > > > > values hard coded and it popped up a message box that
> > > > > displayed
> > > > > the
> > > > > color value from the rgb input. I rewrote it as a Function
> > > > > that
> > > > > took
> > > > > the
> > > > > rgb values as parameters.
> > > > >
> > > > > Here is the basic:
> > > > >
> > > > > Function ColorExampleFunc(r as long, g as long, b as long)
> > > > > Dim lVar As Long
> > > > > lVar = rgb(207,231,245)
> > > > > msgbox "The color " & lVar & " consists of:" & Chr(13) &_
> > > > > "red= " & red(lVar) & Chr(13)&_
> > > > > "green= " & green(lVar) & Chr(13)&_
> > > > > "blue= " & blue(lVar) & Chr(13) , 64,"colors"
> > > > >
> > > > > end function
> > > > >
> > > > > Here is the python:
> > > > >
> > > > > #test_basic.py
> > > > > import os
> > > > >
> > > > > result = os.system('soffice
> > > > > "macro:///Standard.Module1.ColorExampleFunc(207,231,245)"')
> > > > >
> > > > > This works as it will pop up the message box with the color
> > > > > value
> > > > > displayed. What I need to do is capture that color value
> > > > > (which
> > > > > is
> > > > > usually an eight digit number) in variable in the python
> > > > > script.
> > > > >
> > > > > I printed result and it was equal to 0.
> > > > >
> > > > > It's been a long time since I did anything in basic. I
> > > > > imagine I
> > > > > would
> > > > > have to get rid of the msgbox code and set the rgb values
> > > > > equal
> > > > > to a
> > > > > variable and then return them, but I'm not sure how to do it.
> > > > >
> > > > > Does anyone know how to get the color value in the python
> > > > > script?
> > > > >
> > > > > Thanks, Jim
> > > > >
> > > > >
> > > >
> > > > You need used MasterScriptProviderFactory
> > > >
> > > > Change the original Basic function to:
> > > >
> > > > Function ColorExampleFunc(r As Integer, g As Integer, b As
> > > > Integer)
> > > > As
> > > > Long
> > > > ColorExampleFunc = RGB(r, g, b)
> > > > end function
> > > >
> > > > Then you can call, look my example:
> > > > https://gitlab.com/snippets/1977700
> > > >
> > > >
> > > > Best regards
> > > >
> > >
> > > Mauricio,
> > >
> > > Thanks for sharing your script with me. I ran it but got a
> > > Segmentation
> > > fault. I scattered some print()'s throughout the script and it
> > > looks
> > > like this is the line that may be causing the problem.
> > >
> > > script = factory.createScriptProvider('').getScript(url) which is
> > > in
> > > the
> > > def _call_macro_basic(location, args) function. Execution does
> > > not
> > > continue past that line.
> > >
> > > I have been working on automating some of my worksheets using
> > > OOSheet.
> > > This means that I must start libreoffice calc like this:
> > >
> > > libreoffice /home/jfb/Dev/Test_OOSheet.ods
> > > --
> > > accept="socket,host=localhost,port=2002;urp;StarOffice.ServiceMan
> > > ager
> > > "
> > >
> > > Maybe this is why the script works for you and gives me the
> > > Segmentation
> > > fault. I am going to keep trying get it to work for me as I think
> > > it
> > > offers me the best chance of doing what I want to do.
> > >
> > > Thanks, Jim
> > >
> > >
> >
> > The script work fine, if you execute into LibreOffice. If you want
> > execute outside LibreOffice, you need used other technique.
> >
> > But, if you tell me "exactly" your context and that you "exactly"
> > want,
> > I can help you, but I don't like to guess.
> >
>
> I am enhancing a python script that changes background colors based
> on
> hard coded color values. I would like to be able to enter the color
> I
> want to use as rgb and receive the color value back to be used in
> the
> color changing part of the script.
>
> I was googling for ways to use rgb values to get back a color value
> when
> I came across the libreoffice basic function that did what I wanted.
> That is the only reason I was looking at calling a basic function
> and
> getting a return value. I would much prefer a python solution but
> could
> not find one.
>
> Thanks, Jim
>
>
>


color = (r << 16) + (g << 8) + b





--
To unsubscribe e-mail to: users+unsubscribe@global.libreoffice.org
Problems? https://www.libreoffice.org/get-help/mailing-lists/how-to-unsubscribe/
Posting guidelines + more: https://wiki.documentfoundation.org/Netiquette
List archive: https://listarchives.libreoffice.org/global/users/
Privacy Policy: https://www.documentfoundation.org/privacy

Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.