有没有办法将 html 表格导出到可在所有浏览器中运行的 Excel 中?

2023-12-12

我使用了下面的代码,但它仅适用于 Firefox。 它也不允许自定义导出的文件名。它需要一个随机文件名。

 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" ><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, filename) {
            var OriginalHTML = $('#' + table + '').html();
            if (!table.nodeType) {

                table = document.getElementById(table);
                $(table).find(".EditColumns").remove();
            }
            var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }
            $(table).html(OriginalHTML);

            //window.location.href = uri + base64(format(template, ctx))
            document.getElementById("aExportTable").href = uri + base64(format(template, ctx));
            document.getElementById("aExportTable").download = filename;
            document.getElementById("aExportTable").click();
            HighlightSelectedRow();
        }
    })();

以下代码非常适合我使用 IE8+、Chrome 和 Firefox! 这是将 HTML 表导出到 Excel 的最简单方法,无需使用 blob、ActiveX-Elements 或 downloadify:

只需在 HTML 文档中插入一个空的 Iframe:

<iframe id="txtArea1" style="display:none"></iframe>

将以下函数添加到您的脚本部分并替换表 ID:

function fnExcelReport()
        {
              var tab_text="<table border='2px'><tr bgcolor='#87AFC6'>";
              var textRange; var j=0;
              tab = document.getElementById('headerTable'); // id of table


              for(j = 0 ; j < tab.rows.length ; j++) 
              {     
                    tab_text=tab_text+tab.rows[j].innerHTML+"</tr>";
                    //tab_text=tab_text+"</tr>";
              }

              tab_text=tab_text+"</table>";
              tab_text= tab_text.replace(/<A[^>]*>|<\/A>/g, "");//remove if u want links in your table
              tab_text= tab_text.replace(/<img[^>]*>/gi,""); // remove if u want images in your table
                          tab_text= tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params

                   var ua = window.navigator.userAgent;
                  var msie = ua.indexOf("MSIE "); 

                     if (msie > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./))      // If Internet Explorer
                        {
                               txtArea1.document.open("txt/html","replace");
                               txtArea1.document.write(tab_text);
                               txtArea1.document.close();
                               txtArea1.focus(); 
                                sa=txtArea1.document.execCommand("SaveAs",true,"Say Thanks to Sumit.xls");
                              }  
                      else                 //other browser not tested on IE 11
                          sa = window.open('data:application/vnd.ms-excel,' + encodeURIComponent(tab_text));  


                          return (sa);
          }

最后调用该函数:

<button id="btnExport" onclick="fnExcelReport();"> EXPORT </button>

或使用 JQuery:

$("#btnExport").click(function () {

            fnExcelReport();
        });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有办法将 html 表格导出到可在所有浏览器中运行的 Excel 中? 的相关文章

  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • Jquery:如何隐藏或关闭所有打开的引导工具提示

    这样我就可以从我的验证函数中显示引导工具提示 var options html true placement bottom title div class tooltip alert alert danger message div inp
  • Telegram 授权无默认按钮

    使用 Telegram 第 3 方授权的唯一有记录的方法是使用其提供的脚本https core telegram org widgets login https core telegram org widgets login 这个脚本 正如
  • Bing.com 如何创建放大的缩略图?

    当我使用 Bing com 搜索图像时 我发现它们的图像经过精心裁剪和排序 当您将鼠标放在图像上时 会弹出另一个窗口 其中显示放大的图像 我想在我的程序中做同样的事情 我检查了他们页面的源代码 他们正在使用 javascript 但我仍然不
  • 使用 jQuery 仅从字符串末尾修剪空格

    我知道 jQuery trim 函数 但我需要的是一种仅从字符串末尾修剪空格的方法 而不是开头 So str this is a string 会成为 str this is a string 有什么建议么 Thanks 您可以使用正则表达
  • 使用vba更改工作表的代号

    此代码在 VBE 窗口打开时工作正常 但会引发错误Subscript out of range在这一行 wB VBProject VBComponents wS CodeName Properties CodeName Value wsDa
  • JQuery DataTable 单元格从行单击

    我正在尝试在 jquery 数据表上实现一个函数 该函数返回单击行的第一列和第四列 我正在遵循这个示例 它允许我操作单击的行http datatables net examples api select single row html ht
  • 点击问题:动态生成的链接不触发点击功能

    下面是两个代码片段 由于某种原因什么也没有发生 但来自同一个 JS 文件的其他 jQuery 函数在带有 UL 的页面上执行得很好 这是在盯着我看吗 ul class paganation li 1 li li a href 2 a li
  • Chrome Javascript 调试器暂停时不会重新加载页面

    有时 当我在 Chrome 中调试某些 javascript 并且暂停了 javascript 时 如果我尝试重新加载页面 chrome 只会 继续 调试器 单步执行到下一个断点 似乎没有任何方法可以强制 javascript 完全停止运行
  • 空 URL 哈希导致页面在 js 事件上跳转

    我有一个带有下一个和上一个按钮的照片库 如果我的某个 javascript 方法由于某种原因被破坏 那么当单击其中一个按钮时 它会向 url 添加一个哈希值 即 www google com 我知道可以给散列一个 div id 来跳转到页面
  • 对象数组 - 在 Vue.js 生态系统中更新对象的正确方法

    我不确定问题到底出在哪里 但我会看看是否有人可以帮助我理解我的代码出了什么问题 我正在利用 Vuex 商店来跟踪某些不断变化的状态 我这样做如下 import Vue from vue import Vuex from vuex Vue u
  • setInterval 内的返回值

    我想在 setInterval 内返回一个值 我只想以一定的时间间隔执行一些操作 这就是我尝试过的 function git limit var i 0 var git setInterval function console log i
  • 捕获 XSS(跨站脚本)攻击的最佳正则表达式(Java 中)?

    杰夫实际上在净化 HTML http refactormycode com codes 333 sanitize html 但他的示例是用 C 编写的 而我实际上对 Java 版本更感兴趣 有人有更好的 Java 版本吗 他的示例是否足以直
  • 为什么我需要 $(document.body) 来使用 Mootools Element 方法扩展 document.body?

    因此 在尝试让我的应用程序在最新的 IE 上运行后 结果发现 IE 不喜欢以下代码 document body getElement className Firefox 和 Chrome 响应良好 但是document bodyIE 上没有
  • 在声明组件选择器时添加指令 - Angular 7

    我正在学习 Angular 并通过单击按钮动态创建组件 我正在尝试使用 Angular Material 的拖放功能来拖动这些创建的组件以对它们进行排序 我的基本组件 html 中有以下代码 div style margin 20px di
  • ThreeJS无法加载Json文件

    首先 我已经读过这个问题 https stackoverflow com questions 17201888 three js exporter export object not working with jsonloader r58没
  • Dojo/on 和捕获阶段

    有没有办法用 dojo on 在捕获阶段 而不是冒泡阶段 触发事件 我最终在这里寻找有关 on 的前身 dojo connect 的信息 就其价值而言 dojo connect 似乎不支持捕获阶段的事件侦听器 它的工作原理是将事件处理程序作
  • 通过 vh 和 vw 调整 css 字体大小

    所以我想根据容器的大小自动调整文本的大小 但是如果我使用类似的东西 font size 5vw 看起来不错 但是当我缩小页面时 高度开始变得太小 无论如何 我是否可以根据 vh 和 vw 调整文本大小 例如 如果我只是减小页面的宽度 那么高
  • 使用 jquery 提供附加功能时菜单未正确对齐

    I need to make a mega menu similar to one as show in image below 到目前为止 我已经能够在某种程度上使其发挥作用 例如jsFiddle 在这里 http jsfiddle ne
  • FullCalendar 检查选择日是否有活动?

    我正在使用 Full Calendar js 插件 到目前为止一切顺利 但我想检查开始和结束之间的选择是否有事件 我只需要返回 true 或 false 基本上 如果日期选择中已经存在事件 我想阻止用户创建事件 var calendar c

随机推荐

  • Google App Script URLFetch 配额不清楚

    我有兴趣构建一个依赖外部服务的电子表格插件 并且 URLFetch 似乎是使用应用程序脚本执行远程 HTTP S 调用的唯一方法 我已经达到了应用脚本配额页面检查限制 我可以看到它们是 GSuite 计划每天 100 000 个呼叫 Gma
  • 使用正则表达式检测以带重音的大写字母开头的单词

    我想使用 Java 中的正则表达式提取以大写字母开头的单词 包括重音大写字母 这是我对以大写 A 到 Z 开头的单词的条件 if link text matches A Z true 但我也想要以 a 开头的单词accented也是大写字符
  • MASM32 中令人困惑的括号

    我正在尝试掌握 MASM32 但对以下内容感到困惑 我认为括号用于间接寻址 所以如果我有预定义的变量 data item dd 42 then mov ebx item 会将 item 的内容 即数字 42 放入 ebx 中并 mov eb
  • 如何在 MVC Razor 中显示 TimeSpan

    所以我有一个视频的持续时间 以秒为单位 我想在 Razor 中显示该持续时间 目前我正在使用 TimeSpan FromSeconds item Duration ToString 然而我正在使用的其余代码使用 Html DisplayFo
  • angularjs firebase onAuthStateChanged 注销数据库错误

    当我退出应用程序时 出现以下错误 Error permission denied at users KuehJHDJ15SfS1s6FIh1 Client doesn t have permission to access the desi
  • SSLPeerUnverifiedException 与 httpClient

    我正在尝试使用自签名证书测试安全的 http 连接 仅用于开发目的 但我无法解决对等未验证异常 当然我已经查看了有关此异常的类似帖子 以下是我正在使用的当前实现 public class SelfCertificatesSocketFact
  • 来自 pynput 的键盘监听器

    我正在尝试将键盘侦听器导入到我的班级中 但不断收到 NameError name on press is not defined 这是我的代码 from pynput import keyboard class game code with
  • 如何正确裁剪 iPhone 4G 拍摄的图像(带有 EXIF 旋转数据)?

    Folks 我一直在尝试让这段代码处理 iPhone 4G 上相机拍摄的图像 但没有成功 iPhone CGImageCreateWithImageInRect 旋转一些相机胶卷图片 此代码非常适合裁剪 正常 图像 我从互联网下载的图像或由
  • 未找到目标,请重新连接设备,Xcode:设备支持文件

    升级 Xcode 后 我无法在 Xcode 上运行我的 iPhone 我的 Xcode 等待啊等待终于给出了这样的错误并且卡住了 即使我拔掉了 USB 电缆并删除了派生数据 也没有任何变化 我在将 Xcode 升级到 12 0 12 1 和
  • Python:使用 vars() 将字符串分配给变量

    我发现能够在运行时创建新变量并创建结果字典以供稍后处理 即写入文件 非常有用 myDict for i in range 1 10 temp variable str i vars temp myFunctionThatReturnsDat
  • Slf4j LoggerFactory.getLogger 和 sonarqube

    初始化 Slf4j LoggerFactory getLogger 的正确方法是什么 我的代码中有 static final Logger logger LoggerFactory getLogger MyClass class 但 son
  • 创建 JavaScript 小部件时如何管理浏览器“后退”和“前进”按钮

    我创建了一个 Javascript 小部件 允许用户在外部网站上嵌入日历 现在我没有以任何方式处理浏览器后退 前进按钮 这意味着如果他们点击一个事件 它会通过ajax加载 但是如果他们点击 后退 他们就会被带到以前的网站 我看到两个解决方案
  • 使用vbscript读取/保存网页

    目标 登录网页 并将 html 保存到文件中以供稍后解析 页面上的 html 只是用户列表以及他们登录和注销的时间 当您加载网页时 会弹出一个 JavaScript 框并要求输入登录信息 我可以用 SendKeys 填充它 但我真的想在不弹
  • C# 字符串字符替换

    我有一个字符串 其中倒数第三个字符有时是 如果是这种情况 我想将其替换为 该字符串还可以有其他 贯穿始终 有一个优雅的解决方案吗 编辑 感谢大家的回答 只是为了澄清一下 是的 倒数第三个我的意思是以下形式的字符串xxxxxx xx 这是欧洲
  • 尝试在闪亮的 R 应用程序顶部添加一个框来容纳简短的描述和徽标

    我正在尝试在顶部闪亮的 R 应用程序中添加一个框 以容纳简短的描述和徽标 我一直找不到任何有效的代码 我的想法是包含一个水平框并将徽标的一些文本 图像传递到其中 但尚未找到任何解决方案 任何帮助表示赞赏 下面是一些结构代码 header l
  • Android SD 卡创建的文件不可见

    我使用以下代码在 SD 卡中创建了一个文件 File outputFile new File Environment getExternalStorageDirectory getAbsolutePath File separator te
  • 类型“xxx”在未引用的程序集中定义

    我一直在互联网上寻找有关此问题的答案 并且确实可以使用帮助 我已经看过有关此错误的其他帖子 但这些答案都没有帮助我 完整的错误是 类型 xxx 是在未引用的程序集中定义的 您必须添加对程序集 xxx Version 0 0 0 0 Cult
  • 具有原始值的枚举

    为什么我不能用这样的原始值定义枚举 enum Edges Double Double case TopLeft 0 0 0 0 case TopRight 1 0 0 0 case BottomLeft 0 0 1 0 case Botto
  • Firebase 实时数据库的这些默认安全规则意味着什么?

    I ve created a new project on Firebase and created a Realtime Database in there When asked about the security rules for
  • 有没有办法将 html 表格导出到可在所有浏览器中运行的 Excel 中?

    我使用了下面的代码 但它仅适用于 Firefox 它也不允许自定义导出的文件名 它需要一个随机文件名 var tableToExcel function var uri data application vnd ms excel base6