JavaScript导出HTML表格到Excel出现未知多余首两行问题求助
问题原因
- 非IE分支构造下载链接时,
data:URI的逗号后多写了一个空格,这部分额外内容会被Excel解析为表格前的内容,生成空行 - MIME类型定义错误,你把UTF-8 BOM编码
%EF%BB%BF错误写入了MIME类型字符串中,不属于MIME规范的内容会被当做文件前缀解析,渲染为空行 - 页面本身编码声明为
windows-1252,导出时强制使用UTF-8,编码不匹配会导致开头出现乱码字符,Excel打开时会识别为空白行 - 仅替换了普通空格,未过滤table的
outerHTML中包含的换行、制表符等空白节点,这类节点会被Excel的HTML解析逻辑识别为空行
修复方案
修改exportTableToExcel函数如下:
function exportTableToExcel(tableID, filename = ''){ var downloadLink; // 修正MIME类型,BOM单独处理不要写到类型定义中 var dataType = 'application/vnd.ms-excel;charset=utf-8'; var tableSelect = document.getElementById(tableID); // 先合并所有连续空白字符,再替换空格编码,避免多余换行导致空行 var tableHTML = tableSelect.outerHTML.replace(/\s+/g, ' ').replace(/ /g, '%20'); filename = filename?filename+'.xls':'excel_data.xls'; downloadLink = document.createElement("a"); document.body.appendChild(downloadLink); if(navigator.msSaveOrOpenBlob){ var blob = new Blob(['\uFEFF', tableHTML], { type: dataType }); navigator.msSaveOrOpenBlob( blob, filename); }else{ // 去掉逗号后多余空格,手动添加UTF-8 BOM头 downloadLink.href = 'data:' + dataType + ',%EF%BB%BF' + tableHTML; downloadLink.download = filename; downloadLink.click(); } // 清理生成的临时链接元素 document.body.removeChild(downloadLink); }
额外优化建议
将页面的meta编码改为UTF-8,从根源避免编码不匹配导致的乱码、空行问题:
<meta charset="UTF-8">
内容的提问来源于stack exchange,提问作者Emrah Çalışkan
相关产品推荐
相关产品推荐

