Google Sheets导出的Excel文件经R read.xlsx读取时纯数字字符列出现trailing zero的原因及解决方案咨询
Google Sheets导出的Excel文件经R read.xlsx读取时纯数字字符列出现trailing zero的原因及解决方案咨询
问题背景与异常现象
我最近在处理标本编号数据时碰到了一个很奇怪的问题:我在Google Sheets里维护一份数据表,导出为.xlsx文件后用R的openxlsx包read.xlsx()函数读取时,纯数字的标本编号末尾会被自动加上.0后缀,但带字母或特殊格式的编号却能完全正常显示。
重现步骤与异常输出
- 直接导出Google Sheets数据表为
.xlsx文件(命名为tempnumber.xlsx) - 用R读取该文件的前10行编号列:
library(openxlsx) openxlsx::read.xlsx("tempnumber.xlsx")[1:10,1]
得到的输出是这样的(所有纯数字编号都多了.0):
# A tibble: 10 × 1 Number <chr> 1 112322.0 2 63906.0 3 77315.0 4 77316.0 5 109692.0 6 64046.0 7 166222.0 8 115399.0 9 103553.0 10 112349.0
已验证的特殊情况
- 带字母/特殊格式的标本编号(比如
AB1234)读取完全正常,不会出现后缀问题; - 要是把Google Sheets导出的文件用Microsoft Excel打开(仅点击了“启用编辑”,完全没修改内容)后重新保存,再用相同代码读取,编号就显示正常了:
openxlsx::read.xlsx("tempnumber2.xlsx")[1:10,1]
输出:
# A tibble: 10 × 1 Number <chr> 1 112322 2 63906 3 77315 4 77316 5 109692 6 64046 7 166222 8 115399 9 103553 10 112349
我的困惑与需求
显然这个问题和Google Sheets导出.xlsx文件的内部格式有关,因为只要经Excel重新保存就会消失,但我现在的困境是:
- 数据表需要持续更新,每次导出后都手动用Excel重新保存太繁琐,完全不现实;
- Google Sheets不像Excel那样能直接把单元格格式强制设为“文本”(至少我没找到明确的全局设置方式);
- 这些带
.0的编号会导致后续跨数据框匹配标本时出错,严重打断工作流。
想请教各位前辈:
- 这个
.0后缀是怎么产生的?为什么只有纯数字编号会受影响? - 有没有办法在R读取阶段直接处理掉这个后缀?或者在Google Sheets里做设置,从根源上避免导出时出现这个问题?




