如何在jquery数据表中添加从数组导出到excel的附加数据

如何在jquery数据表中添加从数组导出到excel的附加数据,jquery,excel,datatable,datatables,export-to-excel,Jquery,Excel,Datatable,Datatables,Export To Excel,我有jquerydatatable,下面有列和数据。 我正在使用内置功能将数据导出到excel,并且它正在按预期工作 var table=$('#示例').DataTable({ dom:'Bfrtip', 按钮:[ “复制HTML5”, “卓越HTML5”, “csvHtml5”, “pdfHtml5” ], stateSave:没错, rowsGroup:[//始终按行分组应用到的指定顺序显示列选择器的数组(!) //(列选择器可以是中指定的任何列。)https://datatables

我有jquerydatatable,下面有列和数据。

我正在使用内置功能将数据导出到excel,并且它正在按预期工作

var table=$('#示例').DataTable({
dom:'Bfrtip',
按钮:[
“复制HTML5”,
“卓越HTML5”,
“csvHtml5”,
“pdfHtml5”
],
stateSave:没错,
rowsGroup:[//始终按行分组应用到的指定顺序显示列选择器的数组(!)
//(列选择器可以是中指定的任何列。)https://datatables.net/reference/type/column-selector)
1, 0
]

});以下是一些代码,展示了如何实现这一点:

假设以下起点:

以及JavaScript数组变量中的以下“额外”数据行:

var extraData = [
  "David",
  "Software Engineer 2",
  "Tokyo",
  25,
  "04/25/2011",
  320800
];
然后,当数据导出到Excel时,该表如下所示:

数据表代码:

<script type="text/javascript">

$(document).ready(function() {

  var extraData = [
    "David",
    "Software Engineer",
    "Tokyo",
    29,
    "04/25/2011",
    320800
  ];

  var table = $('#example').dataTable({
    dom: 'Bfrtip',
    buttons: [
      {
        extend: 'excelHtml5',
        title: '', // no title row
        text: 'Excel',
        customize: function ( xlsx ){
          var sheet = xlsx.xl.worksheets['sheet1.xml'];
          insertRowAfter( 6, sheet );
          populateRow( 7, extraData, sheet );
        }
      }
    ]

  });

  // Insert a new row after the rowNum row. The new row is 
  // cloned from the rowNum row.
  function insertRowAfter(rowNum, sheet) {
    var $src_row = $( 'row[r=' + rowNum + ']', sheet );
    var newRowID = parseInt( $src_row.attr( 'r' ) ) + 1;
    var $new_row = $src_row.clone().attr( 'r', newRowID );

    // fix the cell references in the new row:
    $new_row.children( 'c' ).each(function( index ) {
      var newCellID = $( this ).attr( 'r' ).match(/[A-Z]+/) + newRowID
      $( this ).attr( 'r', newCellID );
    });

    // Increment the row and cell references in all rows below
    // where the new row will be inserted:
    $src_row.nextAll('row').each(function( index ) {
      var nextRowID = parseInt( $( this ).attr( 'r' )) + 1;
      $( this ).attr( 'r', nextRowID );
      $( this ).children( 'c' ).each(function( index ) {
        var nextCellID = $( this ).attr( 'r' ).match(/[A-Z]+/) + nextRowID
        $( this ).attr( 'r', nextCellID );
      });

    });

    // Insert the new row:
    $src_row.after($new_row);
  }

  function populateRow( row, data, sheet ) {
    // Assumes data starts in column A, with no gaps. Assumes 
    // no more than 26 columns (A through Z).
    data.forEach(function (item, index) {
      var col = String.fromCharCode(65 + index); // 65 = ascii 'A'
      if ( typeof item === 'string' ) {
        $('c[r=' + col + row + '] t', sheet).text( item );
      } else if ( typeof item === 'number' ) {
        $('c[r=' + col + row + '] > v', sheet).html( item );
      }
    });
  }

});
</script>
处理这个问题有多种方法

这里有一种方法,我们在使用数据之前将其转换为数组:

var extraData = [];
for(var o in dataObject) {
  extraData.push(dataObject[o]);
}

现在,我们可以用与上面所示相同的方式使用
extraData

下面是一些代码,展示了如何实现这一点:

假设以下起点:

以及JavaScript数组变量中的以下“额外”数据行:

var extraData = [
  "David",
  "Software Engineer 2",
  "Tokyo",
  25,
  "04/25/2011",
  320800
];
然后,当数据导出到Excel时,该表如下所示:

数据表代码:

<script type="text/javascript">

$(document).ready(function() {

  var extraData = [
    "David",
    "Software Engineer",
    "Tokyo",
    29,
    "04/25/2011",
    320800
  ];

  var table = $('#example').dataTable({
    dom: 'Bfrtip',
    buttons: [
      {
        extend: 'excelHtml5',
        title: '', // no title row
        text: 'Excel',
        customize: function ( xlsx ){
          var sheet = xlsx.xl.worksheets['sheet1.xml'];
          insertRowAfter( 6, sheet );
          populateRow( 7, extraData, sheet );
        }
      }
    ]

  });

  // Insert a new row after the rowNum row. The new row is 
  // cloned from the rowNum row.
  function insertRowAfter(rowNum, sheet) {
    var $src_row = $( 'row[r=' + rowNum + ']', sheet );
    var newRowID = parseInt( $src_row.attr( 'r' ) ) + 1;
    var $new_row = $src_row.clone().attr( 'r', newRowID );

    // fix the cell references in the new row:
    $new_row.children( 'c' ).each(function( index ) {
      var newCellID = $( this ).attr( 'r' ).match(/[A-Z]+/) + newRowID
      $( this ).attr( 'r', newCellID );
    });

    // Increment the row and cell references in all rows below
    // where the new row will be inserted:
    $src_row.nextAll('row').each(function( index ) {
      var nextRowID = parseInt( $( this ).attr( 'r' )) + 1;
      $( this ).attr( 'r', nextRowID );
      $( this ).children( 'c' ).each(function( index ) {
        var nextCellID = $( this ).attr( 'r' ).match(/[A-Z]+/) + nextRowID
        $( this ).attr( 'r', nextCellID );
      });

    });

    // Insert the new row:
    $src_row.after($new_row);
  }

  function populateRow( row, data, sheet ) {
    // Assumes data starts in column A, with no gaps. Assumes 
    // no more than 26 columns (A through Z).
    data.forEach(function (item, index) {
      var col = String.fromCharCode(65 + index); // 65 = ascii 'A'
      if ( typeof item === 'string' ) {
        $('c[r=' + col + row + '] t', sheet).text( item );
      } else if ( typeof item === 'number' ) {
        $('c[r=' + col + row + '] > v', sheet).html( item );
      }
    });
  }

});
</script>
处理这个问题有多种方法

这里有一种方法,我们在使用数据之前将其转换为数组:

var extraData = [];
for(var o in dataObject) {
  extraData.push(dataObject[o]);
}

现在,我们可以使用与上面所示相同的方式使用
extraData

我得到了一个解决方案,我在这里分享

在导出数据时,我们可以利用下面的方法将自定义数据添加到jquery datatable中

customizeData:函数(数据){

}
我得到了一个解决方案,我在这里分享

在导出数据时,我们可以利用下面的方法将自定义数据添加到jquery datatable中

customizeData:函数(数据){

}
感谢您的回复,并感谢您的帮助。我试试这个。请您帮助使用自定义数组/json数据导出选项,而不是网格数据。这在Jquerydata表中可能吗?@andrewjames-有没有办法用customize:function(xlsx)中的新json对象替换xlsx。因此,它将使用新提供的json对象创建excel。如果我错了,请纠正我。客户改变了他们的要求,这就是为什么我也在检查新的替代品。我非常感谢您的宝贵帮助。您是说您想使用DataTables“Excel”按钮将数据导出到Excel,但您想忽略DataTable中的所有数据,而是使用不同的JSON数据集?如果这是正确的,那么DataTables是错误的技术。或者我误解了你的问题?是的,你是对的。。这就是我要找的。在导出过程中会添加一些附加数据。。我在customize方法中进行了自定义行合并。因此,在customize方法中使用新数据的想法将有所帮助,以便可以使用所有编写的行合并代码。感谢您的回复,并感谢您的帮助。我试试这个。请您帮助使用自定义数组/json数据导出选项,而不是网格数据。这在Jquerydata表中可能吗?@andrewjames-有没有办法用customize:function(xlsx)中的新json对象替换xlsx。因此,它将使用新提供的json对象创建excel。如果我错了,请纠正我。客户改变了他们的要求,这就是为什么我也在检查新的替代品。我非常感谢您的宝贵帮助。您是说您想使用DataTables“Excel”按钮将数据导出到Excel,但您想忽略DataTable中的所有数据,而是使用不同的JSON数据集?如果这是正确的,那么DataTables是错误的技术。或者我误解了你的问题?是的,你是对的。。这就是我要找的。在导出过程中会添加一些附加数据。。我在customize方法中进行了自定义行合并。因此,在customize方法中使用新数据会有所帮助,这样所有编写的行合并代码都可以使用。andrewjames…请查看答案andrewjames…请查看答案