feat(export): 为Excel导出功能添加分组表头支持
- 修改exportVisibleColumnsToExcel函数,增加groupConfig参数 - 实现buildGroupHeaderHtml函数用于构建二级表头结构 - 当存在分组配置时自动生成合并单元格的表头 - 支持按字段分组显示标题并设置样式 - 更新函数注释文档说明新参数用途
This commit is contained in:
@@ -730,7 +730,8 @@ function exportVisibleColumns() {
|
||||
var dateStr = $("#DateValueDate").val() || '';
|
||||
var tabName = page.tabIndex == 2 ? '框架合约' : '日终持仓';
|
||||
var fileName = '日终持仓风险_互换_' + tabName + (dateStr ? '_' + dateStr : '');
|
||||
main.exportVisibleColumnsToExcel(jgrid, fileName);
|
||||
var groupConfig = page.tabIndex == 2 ? eodSwapGroupConfig : null;
|
||||
main.exportVisibleColumnsToExcel(jgrid, fileName, groupConfig);
|
||||
}
|
||||
|
||||
//---------------------------Formatter---------------------------------
|
||||
|
||||
@@ -1209,8 +1209,9 @@ main.refreshCollapsibleGroupHeaders = function (jgrid) {
|
||||
*
|
||||
* @param {jQuery} jgrid jqGrid 容器
|
||||
* @param {string} fileName 导出文件名(不含扩展名)
|
||||
* @param {Array} groupConfig 可选,分组表头配置,每项 { title: string, columns: string[] }
|
||||
*/
|
||||
main.exportVisibleColumnsToExcel = function (jgrid, fileName) {
|
||||
main.exportVisibleColumnsToExcel = function (jgrid, fileName, groupConfig) {
|
||||
var colModel = jgrid.jqGrid('getGridParam', 'colModel');
|
||||
// 只导出可见列(hidden !== true),与折叠状态联动:收起的列自动不可见
|
||||
var visibleCols = colModel.filter(function (c) { return c.hidden !== true && c.name !== 'cb' && c.name !== 'rn'; });
|
||||
@@ -1223,7 +1224,10 @@ main.exportVisibleColumnsToExcel = function (jgrid, fileName) {
|
||||
var html = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">';
|
||||
html += '<head><meta charset="UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>Sheet1</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head>';
|
||||
html += '<body><table border="1">';
|
||||
//表头
|
||||
//表头:有分组配置时导出两级表头(分类 + 字段),否则保持原单级表头。
|
||||
if (groupConfig && groupConfig.length) {
|
||||
html += buildGroupHeaderHtml(visibleCols, groupConfig);
|
||||
}
|
||||
html += '<tr>' + headerLabels.map(function (l) {
|
||||
return '<th style="background:#f0f0f0;font-weight:bold;">' + escapeXml(l) + '</th>';
|
||||
}).join('') + '</tr>';
|
||||
@@ -1252,5 +1256,25 @@ main.exportVisibleColumnsToExcel = function (jgrid, fileName) {
|
||||
function escapeXml(s) {
|
||||
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
||||
}
|
||||
|
||||
function buildGroupHeaderHtml(cols, config) {
|
||||
var titleByColumn = {};
|
||||
config.forEach(function (group) {
|
||||
(group.columns || []).forEach(function (name) {
|
||||
titleByColumn[name] = group.title || '';
|
||||
});
|
||||
});
|
||||
|
||||
var cells = [];
|
||||
for (var i = 0; i < cols.length; i++) {
|
||||
var title = titleByColumn[cols[i].name] || '';
|
||||
var colspan = 1;
|
||||
while (i + colspan < cols.length && (titleByColumn[cols[i + colspan].name] || '') === title) {
|
||||
colspan++;
|
||||
}
|
||||
cells.push('<th colspan="' + colspan + '" style="background:#d9edf7;font-weight:bold;text-align:center;">' + escapeXml(title) + '</th>');
|
||||
i += colspan - 1;
|
||||
}
|
||||
return '<tr>' + cells.join('') + '</tr>';
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user