如果您想将 level1 也导出到 excel,还有另一种方法:
将 rowspan/colspan 替换为空单元格,例如:
<thead>
<tr>
<th>Level 1</th>
<th>Level 1 - Item 1</th>
<th></th>
<th>Level 1 - Item 2</th>
<th></th>
</tr>
<tr>
<th>Level 2</th>
<th>Level 2 - Item 1a</th>
<th>Level 2 - Item 1b</th>
<th>Level 2 - Item 2a</th>
<th>Level 2 - Item 2b</th>
</tr>
</thead>
然后按照@misiu
上面的建议,编辑 TableTools.js。
查找_fnGetDataTablesData
并在其中更改:
if (oConfig.bHeader) { ... }
以此为:
if (oConfig.bHeader) {
//another loop
for (i = 0, rowCount = dt.nTHead.rows.length; i < rowCount; i++) {
aRow = []; //clear row data
for (j = 0, iLen = dt.aoColumns.length; j < iLen; j++) {
if (aColumnsInc[j] && dt.nTHead.rows[i].children[j] !== null) {
sLoopData = dt.nTHead.rows[i].children[j].innerHTML.replace(/\n/g, " ")
.replace(/<.*?>/g, "")
.replace(/^\s+|\s+$/g, "");
sLoopData = this._fnHtmlDecode(sLoopData);
aRow.push(this._fnBoundData(sLoopData, oConfig.sFieldBoundary, regex));
} else {
aRow.push(this._fnBoundData("", oConfig.sFieldBoundary, regex)); //I'm not shure of this!!
}
}
aData.push(aRow.join(oConfig.sFieldSeperator));
}
}
这会将复杂的标题复制/导出到 csv/excel。虽然空的表格单元格在 excel 中将保持为空并且不会被合并。您可以手动合并它们。
虽然不是一个理想的解决方案,但这对我来说非常有效。