Selenium读取Excel手机号转科学计数法9.888888888E9如何解决
问题根因
该问题是Apache POI读取数值型单元格的默认行为导致的:直接对数值型单元格调用toString()方法时,会按照Java对长整型/浮点型的默认格式化规则输出,超过长度的数值会自动转为科学计数法。你修改Excel单元格的显示格式不生效,是因为POI默认读取的是单元格底层存储的原始数值,而非Excel界面配置的显示文本。
解决方案
可通过以下两种方式获取到完整的11位手机号:
方案一:代码侧适配(无需修改Excel文件)
使用POI自带的DataFormatter工具类读取单元格,会自动匹配Excel的显示规则输出内容,适配所有单元格类型:import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.FormulaEvaluator; // 初始化工具类 DataFormatter dataFormatter = new DataFormatter(); FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); // 读取单元格内容,自动处理数值、文本、公式等类型 String v = dataFormatter.formatCellValue(wb.getSheet(sheet).getRow(r).getCell(c), evaluator);该方案无需修改原有Excel文件,直接替换原有读取逻辑即可生效。
方案二:数据源侧适配(修改Excel存储格式)
如果需要从数据源层面解决,注意不要仅修改单元格的显示格式为文本,已输入的数值不会自动切换为文本存储,需要额外操作:- 选中所有手机号所在的列
- 右键设置单元格格式为「文本」
- 选中整列后使用「数据」选项卡下的「分列」功能,直接点击完成,强制将已有数值转为文本存储
操作完成后用原有toString()读取逻辑也能得到纯文本的11位手机号。
内容的提问来源于stack exchange,提问作者Newtoselenium
相关产品推荐
相关产品推荐

