2013-12-19 32 views
2

我有一个jQuery导出表来优化代码。但问题是它改变了xls的导出文件的值。当我输出它时,我的表格td的值为810101E001,它改变了像8.10E + 06这样的值。jquery导出表格以excel更改指数形式的值

请为我提供解决方案现在要做什么。

http://jsfiddle.net/wVejP/773/

jQuery代码是

var tableToExcel = (function() { 
    var uri = 'data:application/vnd.ms-excel;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]; }) } 
    return function(table, name) { 
    if (!table.nodeType) table = document.getElementById(table) 
    var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML} 
    window.location.href = uri + base64(format(template, ctx)) 
    } 
})() 

回答

0

你不是真的从我所看到的导出表到Excel,要导出它里面的Excel HTML(即它仍然编码为该文件内的网页,并且在保存/加载时会收到警告)。

在任何情况下,Excel都会将该字段解释为一个数字,为​​了阻止它这样做,您必须设置该单元格的样式以表明它是文本。但是,由于您没有将HTML转换为内部Excel XML语法,我不知道该怎么做(因为我认为这是正确的<Cell><ss:Data ss:Type="String" ...>...</Data></Cell>)。

因此,无论您需要在HTML完全转换到Excel XML或者你可以只引用的所有单元格数据,是这样的:

contents = table.innerHTML 
       .replace(/(<td[^>]*>)/gi, '$1"') 
       .replace(/(<\/td[^>]*>)/gi, '"$1'); 

但是,引用一切这也不好,最好你希望以某种方式将某些单元格标记为文本并引用它们 - 但是如果您无法自动执行此操作,则只需将引号放入HTML本身即可。如果你知道单元的位置,你可以通过引用一个单元来做到这一点(在你的例子中它是第一个TD,所以很容易)。

但实际上,您需要将HTML转换为Excel XML才能正确执行此操作(您仍然需要知道哪些单元格不希望被解释为数字)。看到这个答案的起点为:Converting excel spreadsheets to HTML