download csv and excel file in zip

121 views
Skip to first unread message

Yebach

unread,
Jan 23, 2016, 1:54:11 PM1/23/16
to web2py-users
Hello

I have the following problem

I need to download a csv and an excel file together in a zip file

I would like to skip the part to create file(s) on server and then serve it and remove it.

I am getting an error while using 

import csv, cStringIO
        import zipfile
        exported_chunks_zip = cStringIO.StringIO()
        rows.export_to_csv_file(exported_chunks_zip, delimiter=';', quoting=csv.QUOTE_NONNUMERIC)
        zipf = zipfile.ZipFile(exported_chunks_zip, "w", compression=zipfile.ZIP_DEFLATED)
        zipf.writestr('ExportAllWorkers.csv', rows)

must be string or read-only buffer, not Rows



rows is value from db.

Also when I try to make an excel file how do i serve it to zip?

Any suggestions?

Thank you




Niphlod

unread,
Jan 23, 2016, 2:09:06 PM1/23/16
to web2py-users
something is wrong with the code.... 

zipf.writestr('ExportAllWorkers.csv', rows)

you can't pipe in to writestr "rows", which in your case is the uber-rich Rows object spitted by DAL, as writestr expects a file-like object or a string.

Maybe what you're trying to do is to pipe in the default representation of a Rows, which is a csv-like string.... but you need to force it as str(rows).

Vid Ogris

unread,
Jan 23, 2016, 2:10:18 PM1/23/16
to web...@googlegroups.com

and how do i add excel file to zip?

--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to a topic in the Google Groups "web2py-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/web2py/cIltc3IDPFA/unsubscribe.
To unsubscribe from this group and all its topics, send an email to web2py+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Niphlod

unread,
Jan 23, 2016, 2:13:18 PM1/23/16
to web2py-users
where is your excel file created ?

Vid Ogris

unread,
Jan 24, 2016, 11:13:44 AM1/24/16
to web...@googlegroups.com
I write to sheet with

 xls_dat = xlwt.Workbook(encoding='utf-8')
 sheet = xls_dat.add_sheet('sheet 1', cell_overwrite_ok = True)
    

for i,rec in enumerate(workers):
            sheet.write(i + 1, 0, rec, style1)
            for a, rr in enumerate(dates):
                sheet.write(0, a+1, rr, date_format)
                for b, rrr in enumerate(dict_result):
                    if (rrr["rw_worker_nick"] == rec) and rrr["rw_date"] == rr:
                        sheet.write(i+1, a+1, rrr["rw_shift"])


id I would be creating a file xls_dat.save(fle)

but since I want to stream everything i guess i have to do it differently 

thank you
--
Lep pozdrav 

Vid Ogris


Niphlod

unread,
Jan 25, 2016, 5:33:46 AM1/25/16
to web2py-users
watching at the API (http://xlwt.readthedocs.org/en/latest/api.html) it seems that the save() method accepts a StringIO object.
so you just need to create another stream, call save() on it (which will fill it with the needed content) and then use it in the zipfile

Vid Ogris

unread,
Jan 25, 2016, 5:46:23 AM1/25/16
to web...@googlegroups.com
I had to change to  openpyxl library

Is it any different there?

Niphlod

unread,
Jan 25, 2016, 10:08:06 AM1/25/16
to web2py-users
reading the api, save() there just takes a filename as an argument.
Reply all
Reply to author
Forward
0 new messages