I want to use the export-feature of SQLFORM.grid. There are some proposals
and questions:

---------------------------------------------------------------------------------------------------

(1) Using the parameter *csv=False* or *csv=True* I can only choose no
exports or all export formats. But there is a new parameter *exportclasses*.
It seems to be intended for new forms of lists. With the following changes
the parameter *exportclasses *could be used to switch off some lists e.g. "*
csv_with_hidden-cols*"

Change gluon/sqlhtml.py, 1839f from

            if export_type in exportManager:
                value = exportManager[export_type]
                clazz = value[0] if hasattr(value, '__getitem__') else value
                oExp = clazz(rows)
                filename = '.'.join(('rows', oExp.file_ext))
                response.headers['Content-Type'] = oExp.content_type
                response.headers['Content-Disposition'] = \
                    'attachment;filename='+filename+';'
                raise HTTP(200, oExp.export(),**response.headers)

to

            if export_type in exportManager:
                value = exportManager[export_type]
                *if value:*
                    clazz = value[0] if hasattr(value, '__getitem__') else
value
                    oExp = clazz(rows)
                    filename = '.'.join(('rows', oExp.file_ext))
                    response.headers['Content-Type'] = oExp.content_type
                    response.headers['Content-Disposition'] = \
                        'attachment;filename='+filename+';'
                    raise HTTP(200, oExp.export(),**response.headers)

and lines 2081f from

        if csv and nrows:
            export_links =[]
            for k,v in sorted(exportManager.items()):
                label = v[1] if hasattr(v, "__getitem__") else k
                link = url2(vars=dict(
                        order=request.vars.order or '',
                        _export_type=k,
                        keywords=request.vars.keywords or ''))
                export_links.append(A(T(label),_href=link))
            export_menu = \
                DIV(T('Export:'),_class="w2p_export_menu",*export_links)

to:

        if csv and nrows:
            export_links =[]
            for k,v in sorted(exportManager.items()):
                *if v:*
                    label = v[1] if hasattr(v, "__getitem__") else k
                    link = url2(vars=dict(
                            order=request.vars.order or '',
                            _export_type=k,
                            keywords=request.vars.keywords or ''))
                    export_links.append(A(T(label),_href=link))
            export_menu = \
                DIV(T('Export:'),_class="w2p_export_menu",*export_links)


Now something like

exportclasses={'csv_with_hidden_cols':*None*},

would switch off csv_with_hidden_cols

---------------------------------------------------------------------------------------------------
.
(2) There is a css-class w2p_export_menu in the menu, but I could not find
a class definition in web2py.css. I think something like

.w2p_export_menu a {
     margin-left: 0.5em;
     border-left: 1px solid #000;
     padding-left: 0.5em;
}

.w2p_export_menu a:first-child {
    margin-left: 0; border-left: none;
}

is missing in web2py.css

---------------------------------------------------------------------------------------------------

(3) I think only the columns listed in

SQLFORM.grid(...fields=[..]...)

should be exported, but I always get all columns. Who has an idea?

---------------------------------------------------------------------------------------------------

(4) tsv-export:
If there is a field like

Field('persons','list:reference auth_user')

the tsv-export puts every part of this list in its own column, but all
persons should be in one column.
In other words: if there is one row with 2 persons and another row with 3
persons the excel-table is scattered.

The csv-file shows the list of persons separated with "|"s

---------------------------------------------------------------------------------------------------

Regards, Martin

-- 



Reply via email to