如何在jquery数据表中添加从数组导出到excel的附加数据
我有jquerydatatable,下面有列和数据。 我正在使用内置功能将数据导出到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
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…请查看答案