Hi Grégori,

I tried exactly what you suggested already yesterday but it didn't work. I
did find a solution after some fiddling and now it works.
https://github.com/rdkit/rdkit/pull/371/files

Thanks!


On Tue, Nov 4, 2014 at 9:32 AM, Grégori Gerebtzoff <greg...@gerebtzoff.com>
wrote:

>  Hi Samo,
>
> I don't think you need temporary files at all;
> have you tried something like this?
>
> from cStringIO import StringIO
> image_file = StringIO()
> img = Draw.MolToImage(row[molCol], size=size)
> img.save(image_file, format='PNG')
> image_data = image_file.getvalue()
>
> Grégori
>
>
>
> On 03. 11. 14 21:44, Samo Turk wrote:
>
>  Hi Grégori,
>
>  Thanks for pointing this out. I modified the code and now it writes only
> one temporary file.
>
>  Cheers,
> Samo
>
> On Fri, Oct 31, 2014 at 10:56 AM, Grégori Gerebtzoff <
> greg...@gerebtzoff.com> wrote:
>
>>  Hi Samo,
>>
>> I used a few years ago the PHPExcel library to put images into an Excel
>> file, and it was not necessary to use physical files.
>> Having a quick look at the library I found this class (probably the one I
>> used): PHPExcel_Worksheet_MemoryDrawing (source code:
>> https://github.com/clariondoor/PHPExcel/blob/master/Worksheet/MemoryDrawing.php
>> )
>> The interesting bit:
>>     public function __construct()
>>     {
>>         // Initialise values
>>         $this->_imageResource        = null;
>>         $this->_renderingFunction     = self::RENDERING_DEFAULT;
>>         $this->_mimeType            = self::MIMETYPE_DEFAULT;
>>         $this->_uniqueName            = md5(rand(0, 9999). time() .
>> rand(0, 9999));
>>
>>         // Initialize parent
>>         parent::__construct();
>>     }
>>
>> Thus I'm pretty sure you can use the same trick in python XlsxWriter
>> (have a look at the _add_image_files function in packager.py), using a
>> random file name and a bit stream to the image, as described here:
>> http://xlsxwriter.readthedocs.org/en/latest/example_images_bytesio.html#ex-images-bytesio
>> :
>>
>> filename   = 'python.png'
>> image_file = open(filename, 'rb')
>> image_data = BytesIO(image_file.read())
>> image_file.close()
>> # Write the byte stream image to a cell. The filename must  be specified.
>> worksheet.insert_image('B8', filename, {'image_data': image_data})
>>
>> At least it's worth a try!
>> Another trick I had to do both with PHPExcel and in VBA was to set the
>> width of columns three times to make sure that it was actually correct.
>> Don't ask me why... Just in case you face some width issues.
>>
>> Good luck!
>>
>> Grégori
>>
>>
>>
>> On 30. 10. 14 16:49, Samo Turk wrote:
>>
>>     Hi rdkiters,
>>
>>  Due to popular demand I started to work on a function to export pandas
>> DataFrame to xlsx with molecule images embedded.
>>  Because of the xlsx specifics the code is not optimal. The most annoying
>> thing about this implementation is that it has to write all images to the
>> hard drive, before it packs them in xlsx (and deletes them at the end). I
>> checked two python xlsx libraries and both save images that way. If someone
>> finds better solution, please share it.
>>
>>  The dimensions of cells with images are not optimal because Excel is
>> weird. :) From xlsxwriter docs): "The width corresponds to the column width
>> value that is specified in Excel. It is approximately equal to the length
>> of a string in the default font of Calibri 11. Unfortunately, there is no
>> way to specify “AutoFit” for a column in the Excel file format."
>>
>>  It crashes if value of a cell is of wrong type so use
>> df['value'].astype() to fix incorrectly assigned types.
>>
>>  Resulting files work nicely in Office 365 (standalone and web app), but
>> for some reason don't work optimally with LibreOffice (after row ~125 it
>> stacks all images).
>>
>>   I made a pull request on GitHub:
>> https://github.com/rdkit/rdkit/pull/371
>>  Demo:
>> http://nbviewer.ipython.org/github/Team-SKI/snippets/blob/master/IPython/rdkit_hackaton/XLSX%20export.ipynb
>>  Demo xlsx file:
>> https://github.com/Team-SKI/snippets/blob/master/IPython/rdkit_hackaton/demo.xlsx
>>
>>  Regards,
>> Samo
>>
>>
>>   
>> ------------------------------------------------------------------------------
>>
>>
>>
>> _______________________________________________
>> Rdkit-discuss mailing 
>> listRdkit-discuss@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>>
>> _______________________________________________
>> Rdkit-discuss mailing list
>> Rdkit-discuss@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
>>
>>
>
>
------------------------------------------------------------------------------
_______________________________________________
Rdkit-discuss mailing list
Rdkit-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/rdkit-discuss

Reply via email to