如何移除table2excel生成Excel文件中的代码内容
问题:table2excel导出Excel时包含网页表格中不存在的代码
使用table2excel库导出表格时,生成的Excel文件里出现了网页表格中未显示的代码片段,网页端表格显示正常。
导出按钮JS代码:
$('#to_excel').click(function(e){ e.preventDefault() $("#jv_table").table2excel({ name: "JV SUMMARY", filename: "jv_summary_excel.xls", // do include extension preserveColors: false // set to true if you want background colors and font colors preserved }); })
表格生成PHP代码:
<?php if(!isset($_GET['summary'])) { foreach($newArr as $arr){ if(array_keys(array_values($arr)[0])[0] =="GL ACCOUNT" || array_keys(array_values($arr)[0])[0] == "COST CENTER") continue; ?> <tr class="<?=array_keys(array_values($arr)[0])[0] == "A/P - KLASSIC" ? "end" : ""?>"> <td><?=explode('_',array_keys($arr)[0])[0]?></td> <!-- DEPARTMENT --> <td><?=$gl_accounts[array_keys(array_values($arr)[0])[0]]?></td> <!-- GL ACCOUNT NUMBERS --> <td><?=array_keys(array_values($arr)[0])[0]?></td> <!-- GL ACCOUNT NAMES --> <td><?=$cost_centers[explode('_',array_keys($arr)[0])[0]]?></td> <!-- COST CENTER --> <td><?=$profit_centers[explode('_',array_keys($arr)[0])[0]]?></td> <!-- PROFIT CENTER (P90-SOMETHING) --> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.32),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.20),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.20),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.26),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.02),2)?></td> </tr> <?php }} ?>
问题截图:导出Excel中的异常代码
解决方案
1. 移除表格中的HTML注释
你的PHP代码里的<td>标签后带有HTML注释(比如<!-- DEPARTMENT -->),table2excel在抓取表格内容时会将这些注释一并包含,最终出现在导出的Excel文件中。
修改PHP代码,删除所有<td>后面的注释:
<?php if(!isset($_GET['summary'])) { foreach($newArr as $arr){ if(array_keys(array_values($arr)[0])[0] =="GL ACCOUNT" || array_keys(array_values($arr)[0])[0] == "COST CENTER") continue; ?> <tr class="<?=array_keys(array_values($arr)[0])[0] == "A/P - KLASSIC" ? "end" : ""?>"> <td><?=explode('_',array_keys($arr)[0])[0]?></td> <td><?=$gl_accounts[array_keys(array_values($arr)[0])[0]]?></td> <td><?=array_keys(array_values($arr)[0])[0]?></td> <td><?=$cost_centers[explode('_',array_keys($arr)[0])[0]]?></td> <td><?=$profit_centers[explode('_',array_keys($arr)[0])[0]]?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.32),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.20),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.20),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.26),2)?></td> <td><?=number_format((array_values(array_values($arr)[0])[0] * 0.02),2)?></td> </tr> <?php }} ?>
2. 提前过滤表格内的注释节点
如果不想修改HTML结构,可以在导出前通过JS移除表格中的注释节点:
$('#to_excel').click(function(e){ e.preventDefault() // 移除表格内所有注释节点 $("#jv_table").find("td, tr, th").contents().filter(function() { return this.nodeType === 8; // 匹配注释节点类型 }).remove(); $("#jv_table").table2excel({ name: "JV SUMMARY", filename: "jv_summary_excel.xls", preserveColors: false }); })
3. 排查表格内的隐藏元素
检查网页中是否有隐藏的<script>、<style>或其他代码元素嵌套在表格内部(比如通过display:none隐藏),table2excel会抓取表格内的所有元素,包括隐藏内容。如果存在这类元素,需要将它们移出表格容器。
4. 更换更可靠的导出库
如果上述方法无效,可以考虑替换为SheetJS(xlsx)这类更成熟的表格导出库,它对HTML表格的解析更精准,能有效避免异常内容导出的问题。
内容的提问来源于stack exchange,提问作者user22249320
相关产品推荐
相关产品推荐

