之前我寫了一篇文章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列中的單元格轉成成真正的數字,其它列的保持原態):?
?