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

SheetJS导出Excel时日期显示异常、ID转科学计数法及丢失前导零问题求助

问题原因
  • ID列显示科学计数法、丢失前导零:SheetJS默认会自动识别单元格内容的格式,将看起来符合数值规则的字符串强制转换为数值类型。11位全数字ID超过Excel常规数值的显示长度,会自动转为科学计数法展示;以0开头的类数字字符串转为数值后,前导零会被自动丢弃。
  • 日期列显示######、日月颠倒:SheetJS默认会将符合日期格式的字符串识别为日期类型,但解析规则为月/日/年,会把原始日/月/年格式的日期的日月位置识别颠倒;同时Excel中日期类型的单元格如果列宽不足,就会显示为######,鼠标悬浮时才会展示完整内容。
修复方案

方案1:保留HTML表格原始文本内容(操作最简单)

直接关闭SheetJS的自动类型转换功能,所有单元格直接取DOM中的原始文本内容,不会做任何类型转换,完全和网页展示效果一致,修改代码如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.2/xlsx.full.min.js"></script>
<script>
    var a = document.getElementById("new_table");
    // 增加raw: true配置,关闭自动类型转换,保留单元格原始文本
    var fp = XLSX.utils.table_to_book(a, {sheet:"table", raw: true});
    XLSX.write(fp,{
        bookType:'xlsx',
        type:'base64'
    });
    XLSX.writeFile(fp,"table.xlsx");
</script>

方案2:保留日期为Excel可识别的日期类型(方便后续数据处理)

如果需要导出的日期可以直接在Excel中做筛选、计算等操作,可手动设置单元格格式、列宽来解决异常,修改代码如下:

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.2/xlsx.full.min.js"></script>
<script>
    var a = document.getElementById("new_table");
    var fp = XLSX.utils.table_to_book(a, {sheet:"table"});
    var ws = fp.Sheets["table"];

    // 配置列宽,避免日期列显示为######,wch值为列宽字符数,可根据实际列数和需要调整
    ws['!cols'] = [
        {wch: 15}, // 第一列宽度
        {wch: 18}, // 假设第二列为日期列
        {wch: 20}  // 假设第三列为ID列,后续其他列按需补充
    ];

    // 遍历所有数据行(跳过表头),调整ID和日期列的单元格格式
    var range = XLSX.utils.decode_range(ws['!ref']);
    for(let row = range.s.r + 1; row <= range.e.r; row++) {
        // 处理ID列,假设ID列索引为2(列从左到右从0开始计数,按实际情况修改)
        let idCell = ws[XLSX.utils.encode_cell({r: row, c: 2})];
        if(idCell) {
            idCell.t = 's'; // 强制单元格类型为字符串
            idCell.z = '@'; // 设置单元格格式为文本,避免自动转数值
        }
        // 处理日期列,假设日期列索引为1,按实际情况修改
        let dateCell = ws[XLSX.utils.encode_cell({r: row, c: 1})];
        if(dateCell) {
            dateCell.z = 'dd/mm/yyyy'; // 设置日期显示格式为日/月/年
        }
    }

    XLSX.write(fp,{
        bookType:'xlsx',
        type:'base64'
    });
    XLSX.writeFile(fp,"table.xlsx");
</script>

注意:代码中的列索引需要和你实际HTML表格的列顺序对应,自行调整即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:24:04