C#/ClosedXML读取长账号数字为文本的异常问题
强制文本格式读取
不管用Excel、Pandas还是其他工具,直接指定账号列的读取格式为文本。比如用Pandas时,执行pd.read_excel('文件.xlsx', dtype={'账号列名': str});Excel导入数据时,在“数据类型”步骤把账号列设为“文本”,别让程序自动判断类型。如果是已打开的Excel文件,选中账号列右键设为“文本”格式,要是原数据已被破坏,得从原始数据源重新导入。预处理表格避免自动转换
保存表格时选“CSV(逗号分隔)”格式,CSV以纯文本存储,不会自动转数字格式。读取CSV时同样指定账号列为文本类型。或者在Excel里给每个账号单元格前加单引号',强制Excel把内容当文本,不会触发科学计数法或四舍五入。修复已损坏的账号数据
要是账号被转成了科学计数法(比如1.23456E+11),可以用=TEXT(A1, "0")还原(A1是损坏单元格),但注意如果原账号超过15位,Excel已经丢失末尾精度,这种情况只能找原始数据源。如果账号含字母/特殊字符却被识别成数字,检查单元格格式是否被误设为“数字”,改回文本后重新导入。工具端特殊配置
用Python处理时,除了指定dtype,还能通过converters参数灵活转换:pd.read_excel('文件.xlsx', converters={'账号列名': lambda x: str(x).strip()}),避免空值或多余空格导致的识别错误。用Power Query导入时,在“转换”步骤选“数据类型”->“文本”,彻底锁定格式。
内容的提问来源于stack exchange,提问作者JakubTracz

