使用Python的xlrd导入.xlsx时,如何将混合格式数据转为字符串?
解决xlrd读取混合格式单元格为统一字符串的问题
嘿,这个问题我之前处理过,核心问题出在你先把单元格值转成int这一步——带字母的单元格内容根本没法转成整数,自然会报错。我们的目标是不管单元格是纯数字(浮点数形式)还是数字加字母,都直接转成干净的字符串,下面给你两种靠谱的方案:
方案一:根据单元格类型精准处理
xlrd会给每个单元格标记类型,我们可以根据类型来分别处理,既保证纯数字的浮点数转成整数格式的字符串,也保留带字母的文本原样:
import xlrd from datetime import date # 补充导入你用到的date模块 brief = raw_input('Brief: ') page = input('Pagina: ') book = xlrd.open_workbook(brief) sheet = book.sheet_by_index(page) today_date = str(date.today()) rename = today_date + categorianame + '.html' # 假设categorianame是你已定义的变量 # 封装一个单元格转字符串的工具函数 def cell_to_str(cell): if cell.ctype == xlrd.XL_CELL_NUMBER: # 数字类型:如果是整数浮点数(比如123.0),转成整数再转字符串;否则直接转字符串 return str(int(cell.value)) if cell.value.is_integer() else str(cell.value) elif cell.ctype == xlrd.XL_CELL_TEXT: # 文本类型直接返回原内容 return cell.value else: # 其他类型(比如空值)可按需处理,这里默认返回空字符串 return "" # 处理目标单元格(4,1) sku1_str = cell_to_str(sheet.cell(4, 1)) sku1_b = list(sku1_str) # 原来的循环可以直接用list()简化,效果完全一致
方案二:简单粗暴的字符串处理(适合纯数字都是整数的场景)
如果你的纯数字单元格都是整数形式的浮点数(比如只有123.0,没有123.5这种小数),可以直接把单元格值转成字符串后去掉末尾的.0,代码更简洁:
import xlrd from datetime import date brief = raw_input('Brief: ') page = input('Pagina: ') book = xlrd.open_workbook(brief) sheet = book.sheet_by_index(page) today_date = str(date.today()) rename = today_date + categorianame + '.html' # 直接处理单元格值 cell_value = sheet.cell_value(4, 1) # 浮点数就去掉末尾的.0,其他类型直接转字符串 sku1_str = str(cell_value).rstrip('.0') if isinstance(cell_value, float) else str(cell_value) sku1_b = list(sku1_str)
为什么原来的代码会报错?
你原来的sku1 = int(sheet.cell_value(4, 1))这一步,当单元格内容是222930X时,sheet.cell_value()返回的是字符串"222930X",用int()去转肯定会抛出ValueError——因为字符串里包含非数字字符。所以我们要跳过转int的步骤,直接处理成字符串。
内容的提问来源于stack exchange,提问作者Reezppo
相关产品推荐
相关产品推荐

