Openpyxl 1.6.2 has been released

Hello, this blog has moved to here : http://blog.ericgazoni.me, the blog on WordPress will be kept not to break links, but will not be updated anymore, see you there !

This is the first post-sickness release of the year ! \o/

Major changes include :

  • bugfixes (many)
  • improved documentation
  • new image inclusion support, using optional dependency on PIL
  • improved robustness for the charts module (still a work in progress, due to the size of the module)
  • data validation module

Once again, this is the release with the most external contributions so far, I’m really happy to see people interested in making the library go further, and providing such quality code, with tests and even documentation. I can’t thank you enough.

However, several pull request remain open, for various reasons from difficulty to merge with the current state of the code, to open question on the benefits of the change. Anyway, if a pull request didn’t make it into this release, it will probably be in the next 😉

Thank you as well for reporting issues you find on the bug tracker, the issues keep piling up so I still need as much help as possible to solve them, but that also means people are using the library 😉

I have now decided to stop using the Bitbucket Wiki page and instead use the ReadTheDocs documentation mini-site, which is better structured and more readable. I tried for a few hours to hide the wiki page, but it was only causing errors while installing openpyxl using pip, so I reverted my change and the wiki is still online for the moment, but won’t be updated anymore.

Here it is, don’t hesitate to give it a try and report errors if you find any 😉

Happy coding !

Why openpyxl development is stalled for now

virus

I thought that I could communicate a bit more on why things haven’t seemed to move too much since my last announcement about how openpyxl development was going to rock in 2013.
In January, I turned 30, but I also became pretty sick, and what was first diagnosed as simple cold was in fact a severe viral disease, that left me and my liver in pretty bad shape. I’m now recovering from the virus (while my antibodies count is still hitting the ceiling) but for a whole month I was unable to focus for more than a few hours a day, and even then, only thanks to high doses of drugs to keep the fever at sustainable levels. I chose to invest all the time I had to do my day job and also to try my best to support my wife who is taking care of the kids (I unfortunately failed at the latter :-p).

I’m since then undergoing weekly blood analysis and have a MRI scheduled next month to see how bad my liver is and how to make it recover fully, and in the meantime I’m starting to feel better, but I’m definitely feeling like a cranky 80 years old man after 4PM, and this might last for a period ranging from a few weeks to a few months.

I’ll try to review as many pull requests as my strength enables me to in the coming days, but please bear with me, as everything will get in, but maybe not very fast 😉

openpyxl 1.6.1 is out !

First post-babies release, this is a “pull requests integration” release, plus a few fixes (including the infamous race-condition fix that was omitted in 1.5.8).

A huge effort has been put over several months to make this version work on 2.x and 3.x flavors of Python, and except a few broken tests (due to an incompatible test helper) you should be able to officially install and use the library on python 3 as of today.

I’ve noticed the important amount of open tickets on the bug tracker, and unfortunately my available time is shrinking those days due to family business 😉 I’ve set myself the goal to fix one ticket a week, which should keep me busy until 2014 (if nothing else breaks in the meantime). That’s why help is more than ever welcome on fixing bugs, and adding missing features; I’ll do my best to be more reactive in the future when it comes to pull requests (once again, all my apologies to all the great people who have submitted patches for the last six months and must have thought they would never hear a word from me).

Thanks again to all the contributors, especially the ones who have been kind enough to include unit tests in their patches, so I don’t have to spend time making sure they did not break anything ;-)Image

I have been silent for a while … this is why :-)

my two sons, born end of August

Apologies to all the people who were awaiting for some openpyxl news, my wife and I have been quite busy those last months 😉

Meet Dorian and Gabriel, my two “first borns”. They are in an excellent shape, and their parents as well (well, as much as someone who didn’t sleep a full night for a month can be).

Raising newborn twins being a quite demanding job, I’ve stepped back from my work, and also from my opensource contributions for the moment. Hopefully we start to get used to our new life and I should be able to resume my activities soon.

Wish me good luck ! 🙂

Installing Python 2.4 under Ubuntu 11.10 (Oneiric Ocelot)

As I’m currently merging 2.x and 3.x branches of openpyxl, I now need to perform tests over all existing Python releases known to man. I decided to install a new Ubuntu VM to perform the the tests, but I struggled during 2.4 installation.

Tried pythonbrew, which was a very disappointing experience as nothing worked as it was supposed to.

Then I tried to build from source myself, but here again the GCC version available on ubuntu 11.10 is apparently no longer able to compile original python sources.

Here is how I did it :

  1. download RPM version for Fedora here : http://www.python.org/download/releases/2.4/rpms/ (direct link)
  2. install alien (sudo apt-get install alien)
  3. type the following command
$ sudo alien -i python2.4-2.4-1pydotorg.i386.rpm

Now you can type

$ python2.4

and everything should work !

openpyxl 1.5.6

Small compatibility release this time, no big features added, see the changelog by yourself:

  • [iter_worksheet] add support for calculated strings (they have a special data type for that ?)
  • [strings] make sure we always use unicode strings everywhere
  • [iter] fixed max row and column detection for iter reader
  • [styles] fixed custom number format detection under OOCalc
However, a large effort has been made on supporting the whole python 2.4 – 2.7 range. In the past, 2.4 and 2.5 compatibilities were damaged, now it should be restored back to normal.
Once again, thanks to all the contributors for their help 😉

openpyxl 1.5.5

After a long (long) break (sorry, I eventually bought a PS3, I knew this could happen), we come back with a new version of openpyxl !

This has been requested by a few people so here is a small changelog since the last (1.5.4 version):

  • Commented out the ‘scheme’ element as it appears to prevent the font name from being applied in Excel.
  • [cell] added Decimal type as a numeric type (fixes #78)
  • [writer] added write support for wrapped text (fixes #65)
  • [cell] fixed the numeric regexp (fixes #77)
  • [cell] added encoding support for data input (fixes #76)
  • [excel(reader)] Added try except around loading workbook properties, so that workbooks with no properties get the default properties
  • [date_time] Modified the re that deals with W3CDTF date format to allow dates without an ending Z (fixes #73)
  • [cell] Altered the re for numeric in order to block out numbers with leading zeroes (fixes #70)
  • [worksheet(writer)] fixed long number bug. using repr on a long number causes it to return the number with L appended. Now using str() on long numbers
  • [dump] watching file descriptors to avoid a ‘too many open files’ error when dumping a large number of worksheets

So, a lot of big fixes, such as file descriptors, numerical regexps and leading zeroes, and a few improvements, like encoding support.

I’m also very happy to see an ever-increasing number of contributors and of course users 🙂 Thanks again everybody !

PS: special thanks to Yaroslav Halchenko for the late night licence checks 😉

Converting an SQLite database to Access

Hello, this blog has moved to here : http://blog.ericgazoni.me, the blog on WordPress will be kept not to break links, but will not be updated anymore, see you there !
SQLite Logo, SVG version

Image via Wikipedia

After looking for two hours after a tool able to perform such a conversion for a reasonable price, I found a free solution to my customer request:

  • You need Windows, but it works fine in a virtual machine (such as Virtualbox) if you’re on a Mac or Linux/BSD
  • You will also need MS Access installed on this Windows box (I’ll be using Access 2007, so the menu labels might not look exactly as I say, but they are here)
  • You will need to install the SQLite ODBC driver by Christian Werner
  • Then, do not try to use the driver directly from Access (almost gave up the whole thing doing this way) but instead go to your Control Panel > ODBC Sources
  • Create a new source (DSN) from here, pointing to your SQLite file (tested with a SQLite3 database, using the SQLite3 ODBC driver)
  • Start Access, create a new database (tip: if you want to keep Access 2003 compatibility under Access 2007, replace the .accdb extension by .mdb in the “new filename” box
  • Go to External Data > ODBC Sources > System sources and select the DSN you just created at previous step
  • You’ll be prompted to select which tables to import, then start import
  • You’re done
It did not preserve Foreign Keys at my first trial, I saw an option somewhere during the DSN configuration, but didn’t try it. As the driver is working perfectly, this option might as well.
If it spits a reserved error” or says the database is encrypted or is not a valid database, then you didn’t follow the sequence and are probably trying to add the DSN from the Access ODBC dialog. Remember, it has to be done system wide or it won’t work.

Making of a mascot

Although I like the current tone of the Adimian website, with the nice black and white contrast, I still feel it needs a more cheerful image, because you can be serious in your job and yet retain some sense of humor.

So I’ve been sharping my Inkscape skills (don’t laugh) and produced this nice fellow:

Actually, I noticed I was wasting plastic cups every day at the coffee machine, so I thought “let’s buy a mug”, and as I don’t like the idea of someone else accidentally drinking in my cup, I then thought I’d better customize it, say with my company logo. It definitely sounded too serious, so I decided to draw a mascot for the company, and to put it on the cup instead.

Took a few hours to get the shape and the colors right, I know he’s plain ugly and any one-handed monkey could have done better, but well, I made it so I’m proud of it 😉

Next step: find a printer with large supplies of lime-green ink !