Good good study, day day up!

生成站位查询表

周四 13 三月 2025 openpyxl /
import openpyxl
from openpyxl.styles import numbers
import re
import os
import csv

# 查找当前csv文件
excelfiles1 = [f for f in os.listdir('.') if not f.startswith("~$") and f.endswith(".csv")]

# 创建xlsx空白文件
wb1 = openpyxl.Workbook()
ws1 = wb1.active

# 修改默认工作表的标题为"站位表"
ws1.title = "站位表"

# 将csv文件内容填充到xlsx文件
with open(excelfiles1[0], 'r', encoding='gbk') as f:
    reader = csv.reader(f)
    for row in reader:
        ws1.append(row)

# 存储为xlsx文件
outfile = "modified_" + excelfiles1[0].replace('.csv', '.xlsx')
wb1.save(outfile)

# 加载工作簿
wb = openpyxl.load_workbook(outfile)
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'

# 创建站位查询工作表
ws2 = wb.create_sheet(title='站位查询')
ws2['A1'] = 'SN编码'
ws2['B1'] = '子件编码'
ws2['C1'] = '站位'

# 填充查询公式
for i in range(2,200):
    cell2 = ws2[f"B{i}"]
    cell3 = ws2[f"C{i}"]
    cell2.value = f'=IFERROR(VALUE(TRIM(MID(SUBSTITUTE(A{i},"|",REPT(" ",100)),1,100))),"")'
    cell3.value = f'=IF(LEN(B{i})=10,VLOOKUP(B{i},站位表!F:H,3,0),"")'
    cell2.number_format = 'General'
    cell3.number_format = 'General'

# 保存工作簿
wb.save(outfile)    

on the top