JavaScript 导出 HTML 表格到 Excel 并自定义文件名

心靈之曲
发布: 2025-09-14 20:59:00
原创
942人浏览过

javascript 导出 html 表格到 excel 并自定义文件名

第一段引用上面的摘要:

本文档旨在提供一个使用 JavaScript 将 HTML 表格导出为 Excel 文件,并允许用户自定义文件名的解决方案。通过修改现有的 tableToExcel 函数,我们可以创建一个可复用的方法,方便地将网页上的表格数据导出为 Excel 格式,并根据需要设置不同的文件名,避免默认的 "download.xls" 命名。

实现方法

核心在于修改原有的 tableToExcel 函数,使其创建一个 <a> 标签,并将数据 URI 设置为 href 属性,同时设置 download 属性为期望的文件名。 通过程序触发该链接的点击事件,从而实现下载。

以下是修改后的 tableToExcel 函数:

立即学习Java免费学习笔记(深入)”;

酷表ChatExcel
酷表ChatExcel

北大团队开发的通过聊天来操作Excel表格的AI工具

酷表ChatExcel 48
查看详情 酷表ChatExcel
function tableToExcel(table, name) {
    var uri = 'data:application/vnd.ms-excel;base64,';
    var 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"><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><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>';
    var base64 = function (s) {
        return window.btoa(unescape(encodeURIComponent(s)));
    };
    var format = function (s, c) {
        return s.replace(/{(\w+)}/g, function (m, p) {
            return c[p];
        });
    };

    if (!table.nodeType) table = document.getElementById(table);
    var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML };
    var a = document.createElement('a');
    a.href = uri + base64(format(template, ctx));
    a.download = name + '.xls'; // 设置下载的文件名
    a.click(); // 触发下载
}
登录后复制

代码解释:

  1. uri: 定义了数据 URI 的前缀,指定了 MIME 类型为 application/vnd.ms-excel,表示 Excel 文件。
  2. template: 定义了 Excel 文件的 HTML 模板,包含了必要的 XML 命名空间声明和表格结构。 charset=UTF-8 保证中文内容正常显示。
  3. base64: 将字符串转换为 Base64 编码。
  4. format: 使用传入的上下文对象替换模板中的占位符。
  5. table: 接收 HTML 表格的 ID 或元素本身。
  6. name: 接收导出的 Excel 文件名。
  7. a: 创建一个 <a> 元素,用于触发下载。
  8. a.href: 设置 <a> 元素的 href 属性为包含表格数据的 Data URI。
  9. a.download: 设置 <a> 元素的 download 属性为指定的文件名,浏览器会使用该文件名保存文件。
  10. a.click(): 模拟点击 <a> 元素,触发下载。

使用示例

假设你的 HTML 中有一个 ID 为 "myTable" 的表格,你可以这样调用 tableToExcel 函数:

<!DOCTYPE html>
<html>
<head>
    <title>Export to Excel</title>
</head>
<body>

    <table id="myTable">
        <thead>
            <tr>
                <th>Name</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>John Doe</td>
                <td>30</td>
            </tr>
            <tr>
                <td>Jane Smith</td>
                <td>25</td>
            </tr>
        </tbody>
    </table>

    <button onclick="tableToExcel('myTable', 'MyExcelFile')">Export to Excel</button>

    <script>
        function tableToExcel(table, name) {
            var uri = 'data:application/vnd.ms-excel;base64,';
            var 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"><meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8"><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>';
            var base64 = function (s) {
                return window.btoa(unescape(encodeURIComponent(s)));
            };
            var format = function (s, c) {
                return s.replace(/{(\w+)}/g, function (m, p) {
                    return c[p];
                });
            };

            if (!table.nodeType) table = document.getElementById(table);
            var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML };
            var a = document.createElement('a');
            a.href = uri + base64(format(template, ctx));
            a.download = name + '.xls'; // 设置下载的文件名
            a.click(); // 触发下载
        }
    </script>

</body>
</html>
登录后复制

点击 "Export to Excel" 按钮后,将会下载一个名为 "MyExcelFile.xls" 的 Excel 文件。

注意事项

  • 兼容性: 这种方法在现代浏览器中工作良好。 对于旧版本的浏览器,可能需要使用 Flash 或其他插件来实现导出功能。
  • 数据量: 对于非常大的表格,这种方法可能会导致性能问题,因为整个表格数据会被编码为 Base64 字符串。 在这种情况下,考虑使用服务器端解决方案来生成 Excel 文件。
  • 样式: 这种方法只会导出表格的结构和数据,不会保留表格的样式(例如颜色、字体等)。 如果需要保留样式,则需要使用更复杂的库,例如 xlsx 或 exceljs
  • 文件名后缀: 虽然这里使用了 .xls 后缀,但实际生成的是 HTML 格式的 Excel 文件。 现代版本的 Excel 能够正确打开这种文件。 如果需要生成真正的 .xlsx 文件,则需要使用专门的 Excel 文件生成库。

总结

通过修改 JavaScript 函数,我们可以轻松地将 HTML 表格导出为 Excel 文件,并自定义文件名。 这种方法简单易用,适用于小型表格数据的导出。 对于大型表格或需要更多功能的场景,建议使用更专业的 Excel 文件生成库或服务器端解决方案。

以上就是JavaScript 导出 HTML 表格到 Excel 并自定义文件名的详细内容,更多请关注php中文网其它相关文章!

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号