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

使用Sheet.js导出CSV时如何将所有单元格格式设置为文本?

Sheet.js导出CSV避免长数字转为科学计数法的实现方法

你可以通过以下两种常用方案实现强制所有单元格为文本格式,避免长数字被自动转换:

方案1:遍历Worksheet强制设置单元格为文本类型

直接修改Sheet.js生成的工作表对象中所有单元格的类型属性为文本,不会额外插入不可见字符,适合后续需要程序读取CSV的场景:

import * as XLSX from 'xlsx';

// 你的业务数据,可以是数组或JSON格式
const sourceData = [
  ['序号', '长数字字段'],
  ['1', 677894567897],
  ['2', 12345678901234]
];

// 生成工作表
const worksheet = XLSX.utils.aoa_to_sheet(sourceData);

// 遍历所有单元格,跳过!开头的工作表元数据
Object.keys(worksheet).forEach(cellKey => {
  if (cellKey.startsWith('!')) return;
  // 强制设置单元格类型为文本,s即string的缩写
  worksheet[cellKey].t = 's';
});

// 生成工作簿并导出CSV
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, '数据表');
XLSX.writeFile(workbook, '导出结果.csv', { raw: false });

方案2:添加零宽空格前缀强制文本识别

如果导出的CSV主要用于Excel打开查看,可以给长数字前加零宽空格\u200B,该字符不会显示,且会强制Excel将单元格识别为文本,不会自动触发数值格式转换:

import * as XLSX from 'xlsx';

const sourceData = [
  ['序号', '长数字字段'],
  ['1', 677894567897],
  ['2', 12345678901234]
];

// 预处理数据,给符合条件的长数字加零宽空格前缀
const processedData = sourceData.map(row => {
  return row.map(cell => {
    const cellStr = String(cell);
    // 匹配10位以上的纯数字内容,可根据你的业务调整规则
    if (/^\d{10,}$/.test(cellStr)) {
      return `\u200B${cellStr}`;
    }
    return cell;
  })
})

const worksheet = XLSX.utils.aoa_to_sheet(processedData);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, '数据表');
XLSX.writeFile(workbook, '导出结果.csv');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:36:03