使用xlwings将excel表中将无规律的文本型数字批量转化成真正的数字

发布于:2025-05-08 ⋅ 阅读:(84) ⋅ 点赞:(0)

之前我写了一篇文章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 = num
            except 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.value
    if isinstance(val, str):
        try:
            num = float(val.replace(',', '').strip())  # 去除空格与逗号
            cell.value = num  # 转换为数字类型
        except ValueError:
            pass  # 非数字文本跳过

# 可选保存
# wb.save()
# wb.close()

运行结果如下(只有B列中的单元格转成成真正的数字,其它列的保持原态): 

 


网站公告

今日签到

点亮在社区的每一天
去签到