夜雨聆风学习资料网

ARTICLE · 1354913

Excel 粘贴 18 位身份证号,末 3 位变 000

Excel 粘贴 18 位身份证号,末 3 位变 000

上周帮隔壁工位的小周对一张名单表,她把系统导出的身份证号往 Excel 里一粘,翻到第三行我俩都愣了:一长串 18 位的号,末尾齐刷刷变成 000。她第一反应是自己手滑删了,连着撤销两遍,脸都急红了。第一次碰到这个谁都得懵,真不怪她——后来才弄明白,不是没显示全,是 Excel 压根没把这串号当文本存。

先说个不太好听的:末三位变 000 是存储的时候就被改写了,事后把单元格改成「文本格式」救不回来,唯一干净的做法是先把那列设成文本格式,再从原始文件重新导入一遍。顺序反了,返工的还是自己。下面把这个流程走一遍,每步都有能当场看的验证点;依据来自微软官方支持文档《保留前导零和大数》和 Microsoft Learn 上关于长数字归零的答复。

数字超过 15 位,Excel 只留前 15 位有效数字,第 16 位起一律改成 0。它早不是原来那串号了。

为什么会变成 000,问题不在显示

多数人第一反应是列宽不够、格式没调好,拉宽、改小数位折腾一圈毫无变化。根子在存储:Excel 按 IEEE 754 双精度浮点存数字,能精确表示的有效数字就是 15 位。18 位身份证号、16 位以上银行卡号塞进去,超出的位数直接写成 0;数太大还会转成科学计数法,比如 1.23E+17。

微软官方那篇问答里有个直观例子:12345678912345678 粘进去变成 12345678912345600,末尾三位清零,并说明这是「设计默认,无法手动调整改变」。结论只有一句——超过 15 位的号必须以文本格式存。前导零同理:工号 00123 存成数字就成了 123;连 1e9 也会被当成科学记数法读成 1.00E+09。

还有个更隐蔽的坑在文件类型上。CSV 是纯数据文件,不保存任何单元格格式。你在 Excel 里把一列设成文本、另存成 CSV,下次双击打开时,Excel 又按默认「常规」把长号重读一遍,之前设好的格式一点没留住。所以「明明上次设过了,怎么又变 000」,多半是双击这个动作把格式绕过去了,跟你记不记错没关系。

 

这几类号,直接粘贴最容易出事

哪些号要紧张,哪些其实没事

判断标准很简单:这串是不是「只用来认、不用来算」的编号,且超过 15 位。18 位身份证号、16 位以上银行卡号、带前导零的工号,都得按文本对待。反过来,15 位以内、要拿去求和的金额和数量照常按数字存,别全改成文本,否则求和排序全乱套。11 位手机号不用慌,它在 15 位以内。

版本边界单独说。微软在 Microsoft 365、Excel 2024 这些新版加了「自动数据转换」,能关掉「截断为 15 位精度」「删前导零」;Excel 2016、2019、2021 没这个开关,只能靠先设文本和导入向导。别指望一个设置通吃所有版本,按下面这套顺序最稳。

最白忙活的是这个:把已经变成 000 的单元格再改成文本,号不会回来。微软文档写得很明白,设格式「只影响之后输入的内容,不会改变已经输入过的数字」。数据早在存储那步被改写,格式管的是显示和后续输入,管不了已丢的位。真遇到了,别在坏表上反复调格式,直接找原始文件重导。

 

把原始号和存储值摆在一起核对

按这个顺序重做,每步看什么

第一步,别双击 CSV,走导入向导。 打开空白表,点「数据 → 从文本/CSV」,选中文件,在预览窗格点「编辑」进查询编辑器。验证点:预览里那列显示完整 18 位号,末三位不是 000,也没变成 E+17。要是预览就已归零,说明源头可能存坏了,得回去找系统重导。

第二步,把那列类型改成文本。 在查询编辑器点列标题选中整列,走「主页 → 转换 → 数据类型 → 文本」,弹出的「更改列类型」里选「替换当前转换」。验证点:预览里号完整、左对齐,上载后编辑栏里也是完整 18 位。选「常规」等于没做。

第三步,手动补几个号时先设格式再粘。 选中要填的那列,Ctrl+1 打开「设置单元格格式」,数字分类选「文本」,确定后再粘贴。验证点:单元格左上角出现绿色小三角,编辑栏里号码完整。顺序不能反——先粘了再改格式,已归零的位救不回。只补一两个号,也可在号前敲一个英文单引号 ',效果一样是当文本存。

第四步,用 LEN 抽查一遍。 在旁边空列写 =LEN(A1),往下拖几行。验证点:18 位号返回 18,工号 00123 返回 5。返回 15 或看到 E+17 的,就是被截断过,标出来回第二步重导。顺手拉一次 LEN,十秒钟能省一整轮返工。

 

这一步决定号保不保得住

一下午的返工,和一直惦记的那两天

小周那张表两百多行,变 000 本身倒好办,麻烦的是那份原始 CSV 已经被覆盖过一次。最后只能找业务系统重导,一行行核有没有漏,折腾掉大半个下午;那两天她见人就问「你说还有没有哪列也悄悄变了」,那种悬着的感觉比多干的活累人。我自己也干过:图省事双击了 CSV,改完格式以为好了,交出去被退回才发现末三位全是 0,来回返工比一开始走导入向导多花两倍时间。

代价其实全在顺序上。设格式、改类型、拉 LEN 三步不到两分钟;跳过,代价就是重导、逐行核对、和好几天的不放心。长号一旦被改写又没留原始文件,是真的找不回来。收个尾:凡是「只用来认、不用来算」的长编号,一律先设文本再进表;凡是 CSV,一律走导入向导,别双击。真中招了也别慌,找源头重导一遍就完事,不算大事。

交稿前自己核一遍:

  1. 长号列是从「从文本/CSV」导入,不是双击打开
  2. 查询编辑器里那列类型选的是文本,点了替换当前转换
  3. 手动补号是先设文本再粘,单元格有绿色小三角
  4. 用 LEN 抽查过,18 位号返回 18
  5. 要参与计算的金额、数量列没被误设成文本

你那张表里,最多一次有多少行身份证号被改成过 000,评论区报个数。

你更想先看哪个?

A. 手机号前导零被吃掉,怎么批量补回来

B. 一整列日期被认成文本,怎么改回去

———

觉得有用的话,点上方蓝字关注,每天几条能直接上手的干货。

下一篇就写:一整列日期被认成文本,怎么改回去。

评论区说说你遇到的情况,下一期从评论里挑一个来拆。

 

同一个文件,差别只在导入那一步

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料