JS导出HTML表格到Excel时如何过滤排除最后一列
实现导出时排除表格最后一列的修改方案
核心修改逻辑
原来的代码直接拼接整行的innerHTML会包含所有列,我们只需调整行内容的拼接逻辑,遍历每行的单元格时跳过最后一列即可:
- 每行遍历时,先获取当前行的所有单元格集合
cells - 只拼接索引从
0到cells.length - 2的单元格,跳过索引为cells.length - 1的最后一列 - 原有过滤链接、图片、输入框的逻辑,以及兼容IE和其他浏览器的导出逻辑保持不变
调整后的完整代码
function fnExcelReport(){ var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>"; var textRange; var j=0; tab = document.getElementById('myTable'); // 对应页面表格的id for(j = 0 ; j < tab.rows.length ; j++) { var row = tab.rows[j]; var rowHtml = ""; // 遍历单元格时跳过最后一列 for(var i = 0; i < row.cells.length - 1; i++){ rowHtml += row.cells[i].outerHTML; } tab_text = tab_text + rowHtml + "</tr>"; } tab_text=tab_text+"</table>"; tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//不需要移除链接可注释该行 tab_text= tab_text.replace(/<img[^>]*>/gi,""); //不需要移除图片可注释该行 tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); //不需要移除输入框可注释该行 var ua = window.navigator.userAgent; var msie = ua.indexOf("MSIE "); if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) // IE浏览器兼容逻辑 { txtArea1.document.open("txt/html","replace"); txtArea1.document.write(tab_text); txtArea1.document.close(); txtArea1.focus(); sa=txtArea1.document.execCommand("SaveAs",true,"导出表格.xls"); } else // 其他浏览器逻辑 sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text)); return (sa); }
注意事项
如果表格存在跨列合并的单元格,需要额外判断单元格的colSpan属性调整跳过逻辑,无合并单元格的普通表格可直接使用上述代码。
内容的提问来源于stack exchange,提问作者Ailton
相关产品推荐
相关产品推荐

