Good morning. I use the following code:

$.extend($.fn.datagrid.methods, { toExcel: function(jq, filename){ return jq.each(function(){ var uri = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))) } , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }) }; var alink = $('<a style="display:none"></a>').appendTo('body'); var view = $(this).datagrid('getPanel').find('div.datagrid-view'); var table = view.find('div.datagrid-view2 table.datagrid-btable').clone(); var tbody = table.find('>tbody'); view.find('div.datagrid-view1 table.datagrid-btable>tbody>tr').each(function(index){ $(this).clone().children().prependTo(tbody.children('tr:eq('+index+')')); }); var head = view.find('div.datagrid-view2 table.datagrid-htable').clone(); var hbody = head.find('>tbody'); view.find('div.datagrid-view1 table.datagrid-htable>tbody>tr').each(function(index){ $(this).clone().children().prependTo(hbody.children('tr:eq('+index+')')); }); hbody.prependTo(table); var ctx = { worksheet: name || 'Worksheet', table: table.html()||'' }; alink[0].href = uri + base64(format(template, ctx)); alink[0].download = filename; alink[0].click(); alink.remove(); }) }}); 

However, all the same, when you save the file in ".xlsx" office 2010 swears at the opening of the file. If you change the file type to ".xls" and 'data: application / vnd.ms-excel; base64,', then xls opens beautifully. And another problem with the encoding of Russian characters, krakozyabry displayed. I tried to insert a BOM tag, but the file does not open at all in this case.

 'data:application/vnd.ms-excel;base64,' + '\uFEFF' 

How to solve these two problems?

  • You decide what you want. 1. Read the biff8 format, download the xls specification (Excel 4,5,8). 2. See how excel saves to xml. 3. Look for documentation on xlsx, unpack the archive, view the xml-ki, read the documentation on zip. They are a little different. Then you will have fewer questions :) - nick_n_a
  • one
    The xlsx format requires zip (deflate) compression. Or at least stored + zip. Most likely you upload in xml format, which is not xls or xlsx. To remove the cracks, put the xml encoding explicitly, try UTF-8 or <?xml version="1.0" encoding="windows-1251"?> (Encoding is indicated in the header). Put in the subject of the question that you upload in xml (excel). - nick_n_a
  • I didn’t watch it, you are using html format for excel, it is also not xls and xlsx! In 1251 encoding everything is OK, but most likely you have utf-8. In html, the encoding is indicated by a meta-tag. Add the <head><meta charset="utf-8" /> encoding to the header, specify yours (in the example, the encoding is not visible). And write down correctly in the question what format you use. - nick_n_a

0