You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Google Sheets导出的Excel文件经R read.xlsx读取时纯数字字符列出现trailing zero的原因及解决方案咨询

Google Sheets导出的Excel文件经R read.xlsx读取时纯数字字符列出现trailing zero的原因及解决方案咨询

问题背景与异常现象

我最近在处理标本编号数据时碰到了一个很奇怪的问题:我在Google Sheets里维护一份数据表,导出为.xlsx文件后用R的openxlsxread.xlsx()函数读取时,纯数字的标本编号末尾会被自动加上.0后缀,但带字母或特殊格式的编号却能完全正常显示。

重现步骤与异常输出

  1. 直接导出Google Sheets数据表为.xlsx文件(命名为tempnumber.xlsx
  2. 用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的编号会导致后续跨数据框匹配标本时出错,严重打断工作流。

想请教各位前辈:

  1. 这个.0后缀是怎么产生的?为什么只有纯数字编号会受影响?
  2. 有没有办法在R读取阶段直接处理掉这个后缀?或者在Google Sheets里做设置,从根源上避免导出时出现这个问题?

火山引擎 最新活动