首页 > 解决方案 > 我正在尝试从数据表中选择单元格并将它们复制到剪贴板

问题描述

我可以使用 selectCells 按钮选择单元格,但无法将选定的单元格复制到剪贴板。我想要一个将选定单元格复制到剪贴板的按钮

     $(document).ready(function(){

                   $('#example').DataTable({

                    lengthChange: false,
                     extend: 'collection',
                     dom: 'Bfrtip',
                    buttons: [ 'csv', 'excel', 'pdf','selectNone','selectCells',{extend:'copy',text: 'Copy name',
                            className: 'btn btn-primary btn-primary-spacing',cells: function ( idx, data, node ) {
                                return table.cells( { selected: true } ).data()
                              }}],

                    select: true,

                });

在此处输入图像描述

标签: datatables

解决方案


以下包含对您提供的链接中的示例演示的一些小的更改:

      {
        text: 'Copy Select Cells',
        action: function ( e, dt, node, config ) {
          var data = table.cells( { selected: true } ).data();

          console.log(data.length);

          var copyString = '';

          for (var i = 0; i < data.length; i++) {
              copyString = copyString + data[i] + '\t';
              console.log(copyString);
          }

          copyString = copyString.trim(); // to remove trailing tab character

          if (copyString !== undefined) {
            var dummy = document.createElement("input");
            document.body.appendChild(dummy);

            dummy.setAttribute("id", "dummy_id");
            document.getElementById("dummy_id").value=copyString;
            dummy.select();
            document.execCommand("copy");
            document.body.removeChild(dummy);
          }
        }
      }

主要变化是:

  • 它使用table.cells(...)而不是table.cell(...).

  • 它遍历选定的单元格,并从值构建单个字符串。

  • 每个值都由制表符分隔\t

这假设您希望将结果放在单个字符串中。

如果您希望将每行中的单元格数据与其他行分开(例如,通过换行符),那么您必须增强此代码以跟踪单元格行索引。

因为您没有使用标准的“复制/导出”功能,所以您不会收到内置的“复制到剪贴板”通知。您必须为此添加自定义警报。我认为您不能使用该标准功能来满足您的要求。该功能是基于行和列的 - 这就是它也可以复制列标题的方式。

如果您正在挑选要导出的特定单元格,我不知道还有一种方法来获取相关的列标题 - 或者如何将这些标题添加到剪贴板中的数据中。


推荐阅读