使用xlwings将excel表中将无规律的文本型数字批量转化成真正的数字
之前我写了一篇文章excel表中将无规律的文本型数字批量转化成真正的数字-CSDN博客
是使用excel自带的操作,相对繁琐。
今天使用xlwings操作,表格如下(有真正的数字,也有文本型数字,混在在一起):
分两种情况进行转换:
第一种,将整个表内的所有单元格进行转换;
第二种,只针对B列内的单元格进行转换。
第一种代码如下:
import xlwings as xw# 打开工作簿和工作表
wb = xw.Book('文本型数字转换为真正数字.xlsx') # 替换为实际文件名
ws = wb.sheets[0] # 根据需要修改工作表索引或名称# 获取整个已使用区域
used_range = ws.used_range
data = used_range.value # 读取所有单元格内容
print(data)# 遍历所有单元格,将文本型数字转换为数值
for row_idx, row in enumerate(data, start=1):for col_idx, cell in enumerate(row, start=1):if isinstance(cell, str):try:# 去除空格再尝试转换num = float(cell.strip())# 更新为数值ws.cells(row_idx, col_idx).value = numexcept ValueError:pass # 跳过无法转换的字符串# 可选:保存并关闭
# wb.save()
# wb.close()
运行结果如下(表内所有单元格都已经成为真正的数字):
第二种代码如下:
# 只针对B列进行转换
import xlwings as xw# 打开工作簿和工作表
wb = xw.Book('文本型数字转换为真正数字.xlsx') # 请替换为你的实际文件名
ws = wb.sheets[0] # 可按需指定工作表名称,例如 ws = wb.sheets['Sheet1']# 获取 B 列已使用的单元格范围
last_row = ws.range('B' + str(ws.cells.last_cell.row)).end('up').row
column_range = ws.range(f'B2:B{last_row}') # 从第2行开始,假设第1行为标题# 遍历 B 列的单元格
for cell in column_range:val = cell.valueif isinstance(val, str):try:num = float(val.replace(',', '').strip()) # 去除空格与逗号cell.value = num # 转换为数字类型except ValueError:pass # 非数字文本跳过# 可选保存
# wb.save()
# wb.close()
运行结果如下(只有B列中的单元格转成成真正的数字,其它列的保持原态):