是否可以仅导出数据表列的一部分值?

It's possible to export only a portion of the values of a datatable column?

我有一个 datatable,带有一个按钮,可以使用 pdfmake 将其数据导出到 pdf 文件。到目前为止一直很好,直到我收到向其中一列添加一个值的请求(并且该值不应出现在导出的数据中)。我遇到此问题的专栏具有以下组成:

<td>{{client.lot}}<br><p>{{client.lot.total_negotiations}} client(s) negotiating!</p></td>

(好的,我知道这不是将列的所有单元格分成两行的最佳方法)

我想做的是仅导出带有“第一行”的数据(在 <br> 标记之前)。我怎样才能做到这一点?有什么解决方法可以调整 table 或 pdf?

您可以使用 DataTables 提供的 exportOptions.format() 函数来执行此操作。

例如,假设我们从以下 table 数据开始(其中有 2 个单元格包含需要格式化的数据):

生成的 PDF 将如下所示:

DataTables 配置为:

$(document).ready(function() {

  $('#example').DataTable( {

    "dom": 'B<"clear">lfrtip',

    buttons: [{
      extend: 'pdf',
      text: 'Save as PDF',
      exportOptions: {
        modifier: {
          page: 'current'
        },
        format: {
          body: function ( data, rowIdx, colIdx ) {
            if (colIdx == 1) {
              var brIdx = data.indexOf("<br>");
              if (brIdx >= 0) {
                return data.substring(0, brIdx);
              } else {
                return data;
              }
            } else {
              return data;
            }
          }
        }

      }

    }]

  } );

} );

这使用一个函数来检查每个单元格的内容。在我的例子中,我忽略了不在列索引 1 中的任何数据(table 中的第 2 列)。

对于此列中的每个数据单元格,我检查数据中是否存在 <br> 标记。如果存在,则丢弃从该标记到字符串末尾的所有数据。

所有其他列中的所有其他单元格将原封不动地传递到 PDF。

您可能需要根据您的具体需要对此进行调整(例如,如果您需要处理多列,可能需要清除“Lote 14 -”等中的尾随连字符)。

您可能还想将导出逻辑移动到它自己的单独函数中,然后改为从 DataTable 配置调用该函数(这样逻辑就不会混淆 DataTable 配置代码)。

有关此导出功能的背景信息可在此处找到:exportData - 具体而言,请参阅该页面上的 format 部分。这是上例中 exportOptions 配置使用的通用按钮功能。