diff --git a/js/buttons.html5.js b/js/buttons.html5.js index 42e3dad8..0ce4e078 100644 --- a/js/buttons.html5.js +++ b/js/buttons.html5.js @@ -309,8 +309,34 @@ var _exportData = function ( dt, config ) return s; }; - var header = config.header ? join( data.header )+newLine : ''; - var footer = config.footer && data.footer ? newLine+join( data.footer ) : ''; + /* ----- BEGIN added/edited Code ----- */ + //var header = config.header ? join( data.header )+newLine : ''; + if (config.header) { + var header = []; + for (var i=0, ien=data.header.length; i max ) { + /* ----- BEGIN added/edited Code ----- */ + /*if ( data.footer && data.footer[col].length > max ) { max = data.footer[col].length; } + */ + + if ( data.footer) { + var maxFooter = 0; + for (i = 0; i startCol){ //end column + merges[mgCnt] = merges[mgCnt] + ":" + eC; + } else { + merges[mgCnt] = merges[mgCnt] + ":" + sC; + } + + if(endRow > startRow) { //end row + merges[mgCnt] = merges[mgCnt] + eR; + } else { + merges[mgCnt] = merges[mgCnt] + sR; + } + + mgCnt++; //increment number of merge ranges + } + } + } + } + + + + if (mgCnt > 0) { + //add each merge range as a child + var headerMerges = $("mergeCells", rels); + for(i=0;i startCol){ //end column + merges[mgCnt] = merges[mgCnt] + ":" + eC; + } else { + merges[mgCnt] = merges[mgCnt] + ":" + sC; + } + + if(endRow > startRow) { //end row + merges[mgCnt] = merges[mgCnt] + eR; + } else { + merges[mgCnt] = merges[mgCnt] + sR; + } + + mgCnt++; //increment number of merge ranges + } + } + } + } + + + + if (mgCnt > 0) { + //add each merge range as a child + var footerMerges = $("mergeCells", rels); + for(i=0;i'; if ( config.header ) { - html += ''+ addRow( data.header, 'th' ) +''; + /* ----- BEGIN added/edited Code ----- */ + //html += ''+ addRow( data.header, 'th' ) +''; + html += ""; + + //for each header row + for ( var i=0, ien=data.header.length ; i' + data.header[i][j] + '' + } + } + + html += ""; + } + + html += ""; + /* ----- END added/edited Code ----- */ } html += ''; @@ -131,10 +196,74 @@ DataTable.ext.buttons.print = { html += ''; if ( config.footer && data.footer ) { - html += ''+ addRow( data.footer, 'th' ) +''; + /* ----- BEGIN added/edited Code ----- */ + //html += ''+ addRow( data.footer, 'th' ) +''; + html += ""; + + //for each footer row + for ( var i=0, ien=data.footer.length ; i' + data.footer[i][j] + '' + } + } + + html += ""; + } + + html += ""; + /* ----- END added/edited Code ----- */ } html += ''; - // Open a new window for the printable table var win = window.open( '', '' ); win.document.close(); diff --git a/js/dataTables.buttons.js b/js/dataTables.buttons.js index 4ff56907..278985dd 100644 --- a/js/dataTables.buttons.js +++ b/js/dataTables.buttons.js @@ -1984,6 +1984,71 @@ var _message = function ( dt, option, position ) +/* ----- BEGIN added/edited Code ----- */ +/** + * getHeadersFooters - function to read full data content based on dt.aoHeader or dt.aoFooter and convert it into matrix + * form for exporting. + * + */ +var getHeadersFooters = function( thRows ){ + + var numRows = thRows.length; + var numCols = thRows[0].length; + var matrix = []; + + //initialize matrix with "_getHeadersFooters_initialized_" string + for ( var rowIdx = 0; rowIdx < numRows; rowIdx++ ) { + matrix[rowIdx] = []; + for ( var colIdx = 0; colIdx < numCols; colIdx++ ){ + matrix[rowIdx][colIdx] = "_getHeadersFooters_initialized_" + } + } + + // Iterate over each row of the header and add information to matrix. + for ( var rowIdx = 0; rowIdx < numRows; rowIdx++ ) { + var $row = thRows[rowIdx]; + + // Iterate over all columns specified in this row. + for ( var colIdx = 0; colIdx < numCols; colIdx++ ) + { + var $th = $($row[colIdx].cell); + var is_unique = $row[colIdx].unique; + var colspan = $th.attr("colspan") || 1; + var rowspan = $th.attr("rowspan") || 1; + var cellIndex = $row[colIdx].cell.cellIndex; + + + // If the cell has been initialized but not changed, update + if (matrix[rowIdx][colIdx]=="_getHeadersFooters_initialized_") { + + matrix[rowIdx][colIdx] = $th.text(); + + // rowspan + for(var expand = 1; expand < rowspan; expand++){ + matrix[rowIdx+expand][colIdx]="_rowspan_"; + } + + // colspan + // colspan will be incorrect for hidden columns (colvis) + // but cellIndex will correctly find them, in combination with unique + expand = 1; + if (!is_unique){ + if (colIdx + expand < numCols) { + var next_cellIndex = $row[colIdx+expand].cell.cellIndex; + while(cellIndex == next_cellIndex){ + matrix[rowIdx][colIdx+expand]="_colspan_"; + expand++; + if (colIdx + expand >= numCols) break; + next_cellIndex = $row[colIdx+expand].cell.cellIndex; + } + } + } + } + } + } + return matrix; +}; +/* ----- END added/edited Code ----- */ var _exportTextarea = $('