Good good study, day day up!

生成站位查询表

周四 13 三月 2025 openpyxl /
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