pyExcelerator question

John Machin sjmachin at lexicon.net
Mon Dec 18 21:43:42 EST 2006


Gerry wrote:
> I'd like to word wrap some cells, but not others, in an Excel
> spreadsheet, using pyExcelerator and Excel 2003, SP1, under XP.
>
> The code below creates the spreadsheet, but both cells are
> word-wrapped.
>
> As far as I can tell, the second call to XFStyle() overwrites a GLOBAL
> wrap setting, and affects even cells written before the call to
> XFStyle.

You are mostly correct. In Style.py, each style gets initialised to
refer to a module-global bunch of default objects. No copying is done.
Have a look at the patched code down the bottom of this posting -- it
appears to work.

>
> Can anyone shed any light?
>
> Thanks,
>
> Gerry
>
> ============================
> from pyExcelerator import *
>
>
> w   = Workbook()
> ws  = w.add_sheet("alpha")
>
> style                   = XFStyle()
> style.alignment.wrap    = Alignment.NOT_WRAP_AT_RIGHT
> ws.write(1,1,"Not wrapped" + "-" * 50, style)
>
> style2                   = XFStyle()
> style2.alignment.wrap    = Alignment.WRAP_AT_RIGHT
> ws.write(2,1,"Wrapped" + "-" * 50, style2)
>
> w.save("test.xls")


if 0: # original

    _default_num_format = 'general'
    _default_font = Formatting.Font()
    _default_alignment = Formatting.Alignment()
    _default_borders = Formatting.Borders()
    _default_pattern = Formatting.Pattern()
    _default_protection = Formatting.Protection()

    class XFStyle(object):

        def __init__(self):
            self.num_format_str  = _default_num_format
            self.font            = _default_font
            self.alignment       = _default_alignment
            self.borders         = _default_borders
            self.pattern         = _default_pattern
            self.protection      = _default_protection

else: # patch

    class XFStyle(object):

        def __init__(self):
            self.num_format_str  = 'general'
            self.font            = Formatting.Font()
            self.alignment       = Formatting.Alignment()
            self.borders         = Formatting.Borders()
            self.pattern         = Formatting.Pattern()
            self.protection      = Formatting.Protection()

If this works for you, you might like to submit a patch to
http://sourceforge.net/tracker/?func=browse&group_id=134081&atid=730645

HTH,
John




More information about the Python-list mailing list