[IMP] implement export in excel and csv file.

bzr revid: ysa@tinyerp.com-20110722104202-d8suf02qsfi9c29w
This commit is contained in:
Yogesh (OpenERP) 2011-07-22 16:12:02 +05:30
parent bd53153386
commit 2401a12148
3 changed files with 76 additions and 31 deletions

View File

@ -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)

View File

@ -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();
});
},

View File

@ -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>