音浪豆豆_Rachel
2017-12-25 07:32
采纳率: 50%
浏览 7.3k
已采纳

前端js实现web页面导出Excel,乱码问题

以下是我用的js:

使用以下代码导出的Excel文件在WPS中打开好像是正常的,但是在office中打开时,会出现以下提示(我用的是office 2013版的):

图片说明

而且有的时候是乱码的(office 2010版本的出现过乱码的),而有的时候又是正常显示的,具体有什么规律在里面我不清楚。怎么解决这个问题,希望得到你们的帮助。挺急的!

var idTmr;
function  getExplorer() {
    var explorer = window.navigator.userAgent ;
    //ie
    if (explorer.indexOf("MSIE") >= 0) {
        return 'ie';
    }
    //firefox
    else if (explorer.indexOf("Firefox") >= 0) {
        return 'Firefox';
    }
    //Chrome
    else if(explorer.indexOf("Chrome") >= 0){
        return 'Chrome';
    }
    //Opera
    else if(explorer.indexOf("Opera") >= 0){
        return 'Opera';
    }
    //Safari
    else if(explorer.indexOf("Safari") >= 0){
        return 'Safari';
    }
}

function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
}
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))
    }
})();

export function method1(tableid){
  //整个表格拷贝到EXCEL中
    if(getExplorer()=='ie')
    {
      var curTbl = document.getElementById(tableid);
      var oXL = new ActiveXObject("Excel.Application");
      //创建AX对象excel
      var oWB = oXL.Workbooks.Add();
      //获取workbook对象
      var xlsheet = oWB.Worksheets(1);
      //激活当前sheet
      var sel = document.body.createTextRange();
      sel.moveToElementText(curTbl);
      //把表格中的内容移到TextRange中
      sel.select;
      //全选TextRange中内容
      sel.execCommand("Copy");
      //复制TextRange中内容
      xlsheet.Paste();
      //粘贴到活动的EXCEL中
      oXL.Visible = true;
      //设置excel可见属性
      try {
        var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
      } catch (e) {
        print("Nested catch caught " + e);
      } finally {
        oWB.SaveAs(fname);
        oWB.Close(savechanges = false);
        //xls.visible = false;
        oXL.Quit();
        oXL = null;
        //结束excel进程,退出完成
        //window.setInterval("Cleanup();",1);
        idTmr = window.setInterval("Cleanup();", 1);
      }
    }else{tableToExcel(tableid)}
};

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • lanbo316 2017-12-25 07:48
    已采纳

    页面头部meta设置utf-8

    已采纳该答案
    打赏 评论
  • 欢欢-嘎嘎嘎 2017-12-25 08:05

    ## 设置成utf-8<%@ page pageEncoding="utf-8"%>

    打赏 评论
  • guanmingfu123 2017-12-25 08:07

    设置成utf-8试一下,我也遇到过类似的问题

    打赏 评论
  • catfishlyf 2017-12-25 08:16

    检查一下编码格式,把所有需要编码的地方统一设置成utf-8,
    如果帮助到了您,请采纳一下,谢谢支持

    打赏 评论
  • 阡路陌人 2017-12-25 08:43

    一般这种情况是你新建文本时忘了修改文本格式了,这很容易导致乱码,就会与扩展名发生冲突

    打赏 评论
  • jasondyoung 2017-12-25 09:30

    还有个可能,是你导出的是xls格式的。用wps打开没任何提示,而且能看,但用office2010 或更高的就有格式损坏的提示。如果用wps打开是正常的,就有可能是这问题。

    打赏 评论
  • wym785527207 2017-12-25 09:37

    应该是你的Excel导出工具类写的有问题报错了吧 比如类似于空指针 ,会导致这种情况

    打赏 评论
  • romanticcrystal 2017-12-28 07:00

    打赏 评论

相关推荐 更多相似问题