import openpyxl
from openpyxl.styles import numbers
import re
import os
# 查找当前xlsx文件
excelfiles = [f for f in os.listdir('.') if not f.startswith("~$") and f.endswith(".xlsx")]
# 加载工作簿
wb = openpyxl.load_workbook(excelfiles[0])
ws = wb.active
# 1. 将D列转换为文本格式,并将该列中的'00'替换为'-'
for row in range(1, ws.max_row + 1):
cell = ws[f"D{row}"]
if cell.value is not None:
# 先将值转换为字符串
cell_value = str(cell.value)
# 将'00'替换为'-'
cell_value = cell_value.replace('00', '-')
# 设置为文本格式
cell.value = cell_value
cell.number_format = numbers.FORMAT_TEXT
else:
# 如果为空值,设为空字符串并保持文本格式
cell.value = ""
cell.number_format = numbers.FORMAT_TEXT
# 2. 将E列中的'L'替换为'1','R'替换为'2',空值替换为'1'
for row in range(1, ws.max_row + 1):
cell = ws[f"E{row}"]
if cell.value == "L":
cell.value = "1"
elif cell.value == "R":
cell.value = "2"
elif cell.value is None or cell.value == "":
cell.value = "1"
# 确保E列为文本格式
cell.number_format = numbers.FORMAT_TEXT
# 3. 将F列格式设置为数值格式,保留4位小数点
for row in range(1, ws.max_row + 1):
cell = ws[f"F{row}"]
if cell.value is not None:
if isinstance(cell.value, (int, float)):
# 已经是数字类型
cell.number_format = "0.0000"
elif isinstance(cell.value, str) and cell.value.strip():
# 如果是字符串且非空,尝试转换为浮点数
try:
cell.value = float(cell.value.strip())
cell.number_format = "0.0000"
except ValueError:
# 如果不是数字,保持原样
pass
# 4. 在H列设置为常规格式,输入公式'=D1&"-"&E1'
# 首先检查H列是否存在(第8列)
if ws.max_column < 8: # H列是第8列
# 插入列使H列存在
ws.insert_cols(8)
# 设置H列公式
for row in range(1, ws.max_row + 1):
cell = ws[f"H{row}"]
# 输入公式
cell.value = f'=D{row}&"-"&E{row}'
# 设置为常规格式
cell.number_format = 'General'
# 保存工作簿
output_path = "modified_" + excelfiles[0]
wb.save(output_path)
print(f"处理完成,文件已保存为: {output_path}")
print("\n操作总结:")
print("1. D列已转换为文本格式,并将'00'替换为'-'")
print("2. E列处理:'L'→'1','R'→'2',空值→'1'")
print("3. F列已设置为数值格式,保留4位小数")
print("4. H列已设置为常规格式,并输入公式'=Dn&\"-\"&En'(n为行号)")
print("\n详细统计:")
print(f"- 共处理了 {ws.max_row} 行数据")
print(f"- 共处理了 {ws.max_column} 列数据")
on the top