You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需第三方库的HTML导出Excel行列转换、列宽设置及格式调整问题

解决方案

首先说明:没有专门用于HTML导出Excel的原生HTML标签,你当前使用的data:application/vnd.ms-excel URI搭配SpreadsheetML格式XML的方案就是无需第三方库的原生实现方式。

1 行列方向转换实现

不需要重写整体逻辑,仅调整遍历顺序即可完成行列转置,调整后的追加数据逻辑如下:

// 先获取最大列数,避免数组长度不一致导致数据丢失
const maxColLen = Math.max(..._filterData.map(item => item.getAppliedValues().length))
rowsXML = ''
// 外层循环遍历列索引,把每一列转为Excel的一行
for (let a = 0; a < maxColLen; a++) {
    rowsXML += '<Row>'
    // 内层循环遍历所有数据行,取当前列索引对应的值
    for (let i = 0; i < _filterData.length; i++) {
        const colValues = _filterData[i].getAppliedValues()
        const filtervalue = a < colValues.length ? colValues[a].formattedValue : ''
        ctx = {
            nameType: 'String',
            data: filtervalue
        };
        rowsXML += format(tmplCellXML, ctx);
    }
    rowsXML += '</Row>'
}

调整后即可将原来纵向排布的数据转为横向排布。

2 原生预设列宽实现

可以直接通过你当前使用的Office XML原生标签实现,无需依赖第三方库:
你需要修改tmplWorksheetXML模板,在<Table>标签下增加<Column>标签指定列宽,示例如下:

// 修改后的工作表模板,增加ss:Column标签配置列宽,ss:Width单位为磅
tmplWorksheetXML = '<Worksheet ss:Name="{nameWS}"><Table>' +
    // 示例配置3列,列宽分别为80、120、150,你可以根据实际列数调整数量和数值
    '<Column ss:Width="80"/>' +
    '<Column ss:Width="120"/>' +
    '<Column ss:Width="150"/>' +
    '{rows}</Table></Worksheet>'

如果列数不固定,你可以动态生成对应数量的<Column>标签拼入模板即可。对应的语法规则可以参考微软官方发布的Office XML电子表格格式规范。


内容的提问来源于stack exchange,提问作者Farid Arshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:21:02