Re: how to convert VB scripts to Gnumeric python
- From: dm-gnome mercuryresearch com
- To: Gnumeric Mailing List <gnumeric-list gnome org>
- Subject: Re: how to convert VB scripts to Gnumeric python
- Date: Thu, 12 Apr 2018 10:39:43 -0700
I agree, for a python user the Gnumeric interface feels pretty alien,
some kind of wrapper library would be a godsend. The python interpreter
plugin had elements of a basic API in it, though as noted it's not
really usable. As your example shows you really don't need that much in
order to do useful things.
With my application these ended up being the primitives functions used:
- Open file
- Save file (including saving new files )
- Get workbook object (by workbook_get_by_index or via
workbook_get_by_name)
- Get sheet object (by index or sheet_by_name)
- Get cell content (using sheet.cell_get(col, rol) and
sheet.cell_fetch(col, row) )
- Get cell content and style (using cell.get_rendered_text() and
cell.get_style() )
- Set cell content and style (using cell.set_text() and
sheet.style_set_pos() ) - as noted setting style caused gnm_style_unref
errors
- Some odds and ends related to sheet styling (sheet.style_get(col,
row).get_border(5).line_type and sheet.row_is_hidden(row)
sheet.col_is_hidden(col) ) that was specific to my application
With those pretty much everything can be done in python to construct
more advanced operations (like copying and pasting a block.) This is
slight off-topic, but the python interpreter hack allowed me to add some
functionality to menus to extend python, having a new plugin to do that
would be very handy but obviously a side project. One of the features
Excel had that I ended up having to emulate in Python was cut/paste
visible cells only, for example.
I played around a lot with using the sheet view interface initially (as
I was trying to copy VB macros), primarily to do cut and paste. In the
end it wasn't as reliable as I liked and I decided you could implement
copy and paste using the get/set cell primitives instead. I continue to
have issues with style formatting, though, and multi-cell formatting
(like text wrapped across cells) was difficult enough that I skipped
coding for it.
I don't have notes as to why but I know I had to avoid using the get/set
value for some reason, it may be as simple as not knowing to use the
Gnm.Value.new_int() object like you did in your example. Most of my
application involves extracting and reformating existing data in sheets
to new workbooks, so it may have simply been my dealing with existing data.
I don't think it would be too hard to put together a basic example
application akin to a hello_world that does something simple like open a
workbook and place data from an RSS feed into it and save it out.
What would be the best venue to share the initial patches and code
without clogging the list with very long messages? Github?
On 04/12/2018 06:00 AM, Morten Welinder wrote:
Some progress. I have something like this working now:
   import gi
   gi.require_version('Gnm', '1.12')
   from gi.repository import Gnm
   Gnm.init()
   wb = Gnm.Workbook.new_with_sheets(1)
   sheet = wb.sheet_by_index(0)
   sheet.cell_set_value(0,0,Gnm.Value.new_int(10))
   sheet.cell_set_value(0,1,Gnm.Value.new_float(1.0/3.0))
   sheet.cell_set_text(0,2,"=A1+A2")
   wb.recalc()
   for i in range(3):
       print sheet.cell_get_value(0,i).peek_string()
It's not a great API. In fact, in it shows clear signs of being a
bit foreign to Python.
A gotcha: all versions of introspection until about 2 months ago
misunderstood "char const *" as "char *" causing problems with
functions like value_peek_string. Such functions will need to have
their return value marked "transfer none". ("const char *" worked
fine, on the other hand.)
M.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]