[IMP] implement export in excel and csv file.
bzr revid: ysa@tinyerp.com-20110722104202-d8suf02qsfi9c29w
This commit is contained in:
parent
bd53153386
commit
2401a12148
|
@ -3,6 +3,61 @@ import openerpweb
|
|||
import StringIO
|
||||
import csv
|
||||
import xml.dom.minidom
|
||||
import re
|
||||
|
||||
def export_csv(fields, result):
|
||||
fp = StringIO.StringIO()
|
||||
writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
|
||||
|
||||
writer.writerow(fields)
|
||||
|
||||
for data in result:
|
||||
row = []
|
||||
for d in data:
|
||||
if isinstance(d, basestring):
|
||||
d = d.replace('\n',' ').replace('\t',' ')
|
||||
try:
|
||||
d = d.encode('utf-8')
|
||||
except:
|
||||
pass
|
||||
if d is False: d = None
|
||||
row.append(d)
|
||||
writer.writerow(row)
|
||||
|
||||
fp.seek(0)
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
return data
|
||||
|
||||
def export_xls(fieldnames, table):
|
||||
try:
|
||||
import xlwt
|
||||
except ImportError:
|
||||
common.error(_('Import Error.'), _('Please install xlwt library to export to MS Excel.'))
|
||||
|
||||
workbook = xlwt.Workbook()
|
||||
worksheet = workbook.add_sheet('Sheet 1')
|
||||
|
||||
for i, fieldname in enumerate(fieldnames):
|
||||
worksheet.write(0, i, str(fieldname))
|
||||
worksheet.col(i).width = 8000 # around 220 pixels
|
||||
|
||||
style = xlwt.easyxf('align: wrap yes')
|
||||
|
||||
for row_index, row in enumerate(table):
|
||||
for cell_index, cell_value in enumerate(row):
|
||||
cell_value = str(cell_value)
|
||||
cell_value = re.sub("\r", " ", cell_value)
|
||||
worksheet.write(row_index + 1, cell_index, cell_value, style)
|
||||
|
||||
|
||||
fp = StringIO.StringIO()
|
||||
workbook.save(fp)
|
||||
fp.seek(0)
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
#return data.decode('ISO-8859-1')
|
||||
return unicode(data, 'utf-8', 'replace')
|
||||
|
||||
def node_attributes(node):
|
||||
attrs = node.attributes
|
||||
|
@ -187,32 +242,8 @@ class Export(View):
|
|||
return _fields
|
||||
return rec(fields)
|
||||
|
||||
def export_csv(self, req, fields, result):
|
||||
fp = StringIO.StringIO()
|
||||
writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
|
||||
|
||||
writer.writerow(fields)
|
||||
|
||||
for data in result:
|
||||
row = []
|
||||
for d in data:
|
||||
if isinstance(d, basestring):
|
||||
d = d.replace('\n',' ').replace('\t',' ')
|
||||
try:
|
||||
d = d.encode('utf-8')
|
||||
except:
|
||||
pass
|
||||
if d is False: d = None
|
||||
row.append(d)
|
||||
writer.writerow(row)
|
||||
|
||||
fp.seek(0)
|
||||
data = fp.read()
|
||||
fp.close()
|
||||
return data
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def export_data(self, req, model, fields, ids, domain, import_compat=False, context=None):
|
||||
def export_data(self, req, model, fields, ids, domain, import_compat=False, export_format="csv", context=None):
|
||||
context = req.session.eval_context(req.context)
|
||||
modle_obj = req.session.model(model)
|
||||
ids = ids or modle_obj.search(domain, context=context)
|
||||
|
@ -222,4 +253,8 @@ class Export(View):
|
|||
|
||||
if not import_compat:
|
||||
field = [val.strip() for val in fields.values()]
|
||||
return self.export_csv(req, field, result)
|
||||
|
||||
if export_format == 'xls':
|
||||
return export_xls(field, result)
|
||||
else:
|
||||
return export_csv(field, result)
|
||||
|
|
|
@ -373,8 +373,10 @@ openerp.base_export.Export = openerp.base.Dialog.extend({
|
|||
}
|
||||
|
||||
import_comp = $("#import_compat option:selected").val()
|
||||
self.rpc("/base_export/export/export_data", {"model": self.dataset.model, "fields":export_field, 'ids': self.dataset.ids, 'domain': self.dataset.domain, "import_compat":parseInt(import_comp)}, function(data){
|
||||
window.location="data:text/csv;charset=utf8," + encodeURIComponent(data)
|
||||
export_format = $("#export_format").val()
|
||||
|
||||
self.rpc("/base_export/export/export_data", {"model": self.dataset.model, "fields":export_field, 'ids': self.dataset.ids, 'domain': self.dataset.domain, "import_compat":parseInt(import_comp), "export_format" :export_format}, function(data){
|
||||
window.location="data:text/csv/excel;charset=utf8," + data
|
||||
self.close();
|
||||
});
|
||||
},
|
||||
|
|
|
@ -16,13 +16,21 @@
|
|||
<td>
|
||||
<table>
|
||||
<tr>
|
||||
<td class="label"><label for="import_compat">Export Type:</label></td>
|
||||
<td class="label"><label>Export Type:</label></td>
|
||||
<td>
|
||||
<select id="import_compat" name="import_compat" style="background-color: #F3F3F3;" >
|
||||
<option value="1">Import Compatible Export</option>
|
||||
<option value="0">Export all Data</option>
|
||||
</select>
|
||||
</td>
|
||||
<td class="label"><label>Export Format</label></td>
|
||||
<td>
|
||||
<select id="export_format" name="export_format">
|
||||
<option value="csv">CSV</option>
|
||||
<option value="xls">Excel</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
|
@ -114,7 +122,7 @@
|
|||
<tr>
|
||||
<th><label>Save as:</label></th>
|
||||
<td><input size="10" type="text" id="savelist_name"/></td>
|
||||
<td><button id="add_export_list">Ok</button></td>
|
||||
<td><button class="button-export" id="add_export_list">Ok</button></td>
|
||||
</tr>
|
||||
</t>
|
||||
|
||||
|
@ -129,7 +137,7 @@
|
|||
</t>
|
||||
</select>
|
||||
</td>
|
||||
<td><button id="delete_export_list">Delete</button></td>
|
||||
<td><button class="button-export" id="delete_export_list">Delete</button></td>
|
||||
</tr>
|
||||
</t>
|
||||
</template>
|
Loading…
Reference in New Issue