鱼C论坛

 找回密码
 立即注册
查看: 410|回复: 3

[已解决]代码错误,大佬们看看哪里有问题呢

[复制链接]
发表于 2024-9-12 14:01:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import pandas as pd
  2. import tkinter as tk
  3. from tkinter import filedialog
  4. from openpyxl import load_workbook
  5. from openpyxl.drawing.image import Image
  6. import shutil


  7. def select_input_file():
  8.     file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls")], title="请选择输入数据excel,.xlsx格式")
  9.     return file_path


  10. def select_template_file():
  11.     file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx;*.xls")], title="请选择工艺卡模版的excel,.xlsx格式")
  12.     return file_path


  13. def select_target_folder():
  14.     folder_path = filedialog.askdirectory(title="请选择输出文件夹")
  15.     return folder_path


  16. def process_df(df_in):
  17.     for index, row in df_in.iterrows():
  18.         if row['焊接类型'] == '对焊' or row['焊接类型'] == '承插焊':
  19.             diam_thickness = f"Φ{row['主管外径']}*{row['壁厚']}"
  20.             df_in.at[index, '外径壁厚'] = diam_thickness
  21.         elif row['焊接类型'] == '开口焊':
  22.             diam_thickness = f"Φ{row['支管外径']}*{row['支管壁厚']}-Φ{row['主管外径']}*{row['壁厚']}"
  23.             df_in.at[index, '外径壁厚'] = diam_thickness

  24.         # 提取前段材质和前段材质编号
  25.         if "A105" in row["焊缝前材质"]:
  26.             df_in.at[index, '前材质'] = "A105"
  27.             df_in.at[index, '前材质编码'] = 20
  28.         elif "20-G" in row["焊缝前材质"]:
  29.             df_in.at[index, '前材质'] = "20"
  30.             df_in.at[index, '前材质编码'] = 21
  31.         elif "20G-" in row["焊缝前材质"]:
  32.             df_in.at[index, '前材质'] = "20G"
  33.             df_in.at[index, '前材质编码'] = 22
  34.         elif "20Ⅱ" in row["焊缝前材质"]:
  35.             df_in.at[index, '前材质'] = "20Ⅱ"
  36.             df_in.at[index, '前材质编码'] = 23
  37.         elif "20Ⅲ" in row["焊缝前材质"]:
  38.             df_in.at[index, '前材质'] = "20Ⅲ"
  39.             df_in.at[index, '前材质编码'] = 24
  40.         elif "12Cr1MoVG-" in row["焊缝前材质"]:
  41.             df_in.at[index, '前材质'] = "12Cr1MoVG"
  42.             df_in.at[index, '前材质编码'] = 2
  43.         elif "12Cr1MoVⅡ" in row["焊缝前材质"]:
  44.             df_in.at[index, '前材质'] = "12Cr1MoVⅡ"
  45.             df_in.at[index, '前材质编码'] = 3
  46.         elif "12Cr1MoVⅢ" in row["焊缝前材质"]:
  47.             df_in.at[index, '前材质'] = "12Cr1MoVⅢ"
  48.             df_in.at[index, '前材质编码'] = 4
  49.         elif "15CrMoG-" in row["焊缝前材质"]:
  50.             df_in.at[index, '前材质'] = "15CrMoG"
  51.             df_in.at[index, '前材质编码'] = 5
  52.         elif "15CrMoⅡ" in row["焊缝前材质"]:
  53.             df_in.at[index, '前材质'] = "15CrMoⅡ"
  54.             df_in.at[index, '前材质编码'] = 6
  55.         elif "15CrMoⅢ" in row["焊缝前材质"]:
  56.             df_in.at[index, '前材质'] = "15CrMoⅢ"
  57.             df_in.at[index, '前材质编码'] = 7
  58.         elif "S30408-" in row["焊缝前材质"]:
  59.             df_in.at[index, '前材质'] = "S30408"
  60.             df_in.at[index, '前材质编码'] = 11
  61.         elif "S30408Ⅱ" in row["焊缝前材质"]:
  62.             df_in.at[index, '前材质'] = "S30408Ⅱ"
  63.             df_in.at[index, '前材质编码'] = 12
  64.         elif "S30408Ⅲ" in row["焊缝前材质"]:
  65.             df_in.at[index, '前材质'] = "S30408Ⅲ"
  66.             df_in.at[index, '前材质编码'] = 13
  67.         elif "S31603-" in row["焊缝前材质"]:
  68.             df_in.at[index, '前材质'] = "S31603"
  69.             df_in.at[index, '前材质编码'] = 14
  70.         elif "S31603Ⅱ" in row["焊缝前材质"]:
  71.             df_in.at[index, '前材质'] = "S31603Ⅱ"
  72.             df_in.at[index, '前材质编码'] = 15
  73.         elif "S31603Ⅲ" in row["焊缝前材质"]:
  74.             df_in.at[index, '前材质'] = "S31603Ⅲ"
  75.             df_in.at[index, '前材质编码'] = 16
  76.         else:
  77.             df_in.at[index, '前材质编码'] = 0

  78.     # 提取后段材质和前段材质编号
  79.         if "A105" in row["焊缝后材质"]:
  80.             df_in.at[index, '后材质'] = "A105"
  81.             df_in.at[index, '后材质编码'] = 20
  82.         elif "20-G" in row["焊缝后材质"]:
  83.             df_in.at[index, '后材质'] = "20"
  84.             df_in.at[index, '后材质编码'] = 21
  85.         elif "20G-" in row["焊缝后材质"]:
  86.             df_in.at[index, '后材质'] = "20G"
  87.             df_in.at[index, '后材质编码'] = 22
  88.         elif "20Ⅱ" in row["焊缝后材质"]:
  89.             df_in.at[index, '后材质'] = "20Ⅱ"
  90.             df_in.at[index, '后材质编码'] = 23
  91.         elif "20Ⅲ" in row["焊缝后材质"]:
  92.             df_in.at[index, '后材质'] = "20Ⅲ"
  93.             df_in.at[index, '后材质编码'] = 24
  94.         elif "12Cr1MoVG-" in row["焊缝后材质"]:
  95.             df_in.at[index, '后材质'] = "12Cr1MoVG"
  96.             df_in.at[index, '后材质编码'] = 2
  97.         elif "12Cr1MoVⅡ" in row["焊缝后材质"]:
  98.             df_in.at[index, '后材质'] = "12Cr1MoVⅡ"
  99.             df_in.at[index, '后材质编码'] = 3
  100.         elif "12Cr1MoVⅢ" in row["焊缝后材质"]:
  101.             df_in.at[index, '后材质'] = "12Cr1MoVⅢ"
  102.             df_in.at[index, '后材质编码'] = 4
  103.         elif "15CrMoG-" in row["焊缝后材质"]:
  104.             df_in.at[index, '后材质'] = "15CrMoG"
  105.             df_in.at[index, '后材质编码'] = 5
  106.         elif "15CrMoⅡ" in row["焊缝后材质"]:
  107.             df_in.at[index, '后材质'] = "15CrMoⅡ"
  108.             df_in.at[index, '后材质编码'] = 6
  109.         elif "15CrMoⅢ" in row["焊缝后材质"]:
  110.             df_in.at[index, '后材质'] = "15CrMoⅢ"
  111.             df_in.at[index, '后材质编码'] = 7
  112.         elif "S30408-" in row["焊缝后材质"]:
  113.             df_in.at[index, '后材质'] = "S30408"
  114.             df_in.at[index, '后材质编码'] = 11
  115.         elif "S30408Ⅱ" in row["焊缝后材质"]:
  116.             df_in.at[index, '后材质'] = "S30408Ⅱ"
  117.             df_in.at[index, '后材质编码'] = 12
  118.         elif "S30408Ⅲ" in row["焊缝后材质"]:
  119.             df_in.at[index, '后材质'] = "S30408Ⅲ"
  120.             df_in.at[index, '后材质编码'] = 13
  121.         elif "S31603-" in row["焊缝后材质"]:
  122.             df_in.at[index, '后材质'] = "S31603"
  123.             df_in.at[index, '后材质编码'] = 14
  124.         elif "S31603Ⅱ" in row["焊缝后材质"]:
  125.             df_in.at[index, '后材质'] = "S31603Ⅱ"
  126.             df_in.at[index, '后材质编码'] = 15
  127.         elif "S31603Ⅲ" in row["焊缝后材质"]:
  128.             df_in.at[index, '后材质'] = "S31603Ⅲ"
  129.             df_in.at[index, '后材质编码'] = 16
  130.         else:
  131.             df_in.at[index, '后材质编码'] = 0

  132.         df_in['材质'] = ''
  133.         df_in.loc[(df_in['前材质编码'] == 0) & (df_in['后材质编码'] == 0), '材质'] = ''
  134.         df_in.loc[(df_in['前材质编码'] == 0) & (df_in['后材质编码'] != 0), '材质'] = df_in['后材质']
  135.         df_in.loc[(df_in['前材质编码'] != 0) & (df_in['后材质编码'] == 0), '材质'] = df_in['前材质']
  136.         df_in.loc[(df_in['前材质编码'] != 0) & (df_in['后材质编码'] != 0) & (df_in['前材质编码'] == df_in['后材质编码']), \
  137.         '材质'] = df_in['前材质'].astype(str)
  138.         df_in.loc[(df_in['前材质编码'] != 0) & (df_in['后材质编码'] != 0) & (df_in['前材质编码'] < df_in['后材质编码']),\
  139.         '材质'] = df_in['前材质'].astype(str) + "&" + df_in['后材质'].astype(str)
  140.         df_in.loc[(df_in['前材质编码'] != 0) & (df_in['后材质编码'] != 0) & (df_in['前材质编码'] > df_in['后材质编码']),\
  141.         '材质'] = df_in['后材质'].astype(str) + "&" + df_in['前材质'].astype(str)

  142.         # 填写工艺卡编号,先判断最优先级的材质12CrMo
  143.         if row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 13):
  144.             df_in.at[index, '工艺卡编号'] = "HKB12-06"
  145.         elif row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 10):
  146.             df_in.at[index, '工艺卡编号'] = "HKB12-05"
  147.         elif row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 8):
  148.             df_in.at[index, '工艺卡编号'] = "HKB12-04"
  149.         elif row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 5.5):
  150.             df_in.at[index, '工艺卡编号'] = "HKB12-03"
  151.         elif row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 3.5):
  152.             df_in.at[index, '工艺卡编号'] = "HKB12-02"
  153.         elif row['焊接类型'] == '对焊' and "12Cr" in row["材质"] and (row["壁厚"] > 0):
  154.             df_in.at[index, '工艺卡编号'] = "HKB12-01"

  155.         elif row['焊接类型'] == '承插焊' and "12Cr" in row["材质"] and (row["壁厚"] > 5.5):
  156.             df_in.at[index, '工艺卡编号'] = "HKC12-03"
  157.         elif row['焊接类型'] == '承插焊' and "12Cr" in row["材质"] and (row["壁厚"] > 3.5):
  158.             df_in.at[index, '工艺卡编号'] = "HKC12-02"
  159.         elif row['焊接类型'] == '承插焊' and "12Cr" in row["材质"] and (row["壁厚"] > 0):
  160.             df_in.at[index, '工艺卡编号'] = "HKC12-01"

  161.         elif row['焊接类型'] == '开口焊' and "12Cr" in row["材质"] and (row["支管壁厚"] > 5):
  162.             df_in.at[index, '工艺卡编号'] = "HKD12-03"
  163.         elif row['焊接类型'] == '开口焊' and "12Cr" in row["材质"] and (row["支管壁厚"] > 3):
  164.             df_in.at[index, '工艺卡编号'] = "HKD12-02"
  165.         elif row['焊接类型'] == '开口焊' and "12Cr" in row["材质"] and (row["支管壁厚"] > 0):
  166.             df_in.at[index, '工艺卡编号'] = "HKD12-01"
  167.         # 12CrMo的判断结束,接下来判断15CrMo
  168.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 13):
  169.             df_in.at[index, '工艺卡编号'] = "HKB15-06"
  170.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 10):
  171.             df_in.at[index, '工艺卡编号'] = "HKB15-05"
  172.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 8):
  173.             df_in.at[index, '工艺卡编号'] = "HKB15-04"
  174.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 5.5):
  175.             df_in.at[index, '工艺卡编号'] = "HKB15-03"
  176.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 3.5):
  177.             df_in.at[index, '工艺卡编号'] = "HKB15-02"
  178.         elif row['焊接类型'] == '对焊' and "15Cr" in row["材质"] and (row["壁厚"] > 0):
  179.             df_in.at[index, '工艺卡编号'] = "HKB15-01"

  180.         elif row['焊接类型'] == '承插焊' and "15Cr" in row["材质"] and (row["壁厚"] > 5.5):
  181.             df_in.at[index, '工艺卡编号'] = "HKC15-03"
  182.         elif row['焊接类型'] == '承插焊' and "15Cr" in row["材质"] and (row["壁厚"] > 3.5):
  183.             df_in.at[index, '工艺卡编号'] = "HKC15-02"
  184.         elif row['焊接类型'] == '承插焊' and "15Cr" in row["材质"] and (row["壁厚"] > 0):
  185.             df_in.at[index, '工艺卡编号'] = "HKC15-01"

  186.         elif row['焊接类型'] == '开口焊' and "15Cr" in row["材质"] and (row["支管壁厚"] > 5):
  187.             df_in.at[index, '工艺卡编号'] = "HKD15-03"
  188.         elif row['焊接类型'] == '开口焊' and "15Cr" in row["材质"] and (row["支管壁厚"] > 3):
  189.             df_in.at[index, '工艺卡编号'] = "HKD15-02"
  190.         elif row['焊接类型'] == '开口焊' and "15Cr" in row["材质"] and (row["支管壁厚"] > 0):
  191.             df_in.at[index, '工艺卡编号'] = "HKD15-01"
  192.         # 15CrMo的判断结束,接下来判断304类
  193.         elif row['焊接类型'] == '对焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 7):
  194.             df_in.at[index, '工艺卡编号'] = "HKB304-04"
  195.         elif row['焊接类型'] == '对焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 5):
  196.             df_in.at[index, '工艺卡编号'] = "HKB304-03"
  197.         elif row['焊接类型'] == '对焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 3):
  198.             df_in.at[index, '工艺卡编号'] = "HKB304-02"
  199.         elif row['焊接类型'] == '对焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 0):
  200.             df_in.at[index, '工艺卡编号'] = "HKB304-01"

  201.         elif row['焊接类型'] == '承插焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 5.5):
  202.             df_in.at[index, '工艺卡编号'] = "HKC304-03"
  203.         elif row['焊接类型'] == '承插焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 3):
  204.             df_in.at[index, '工艺卡编号'] = "HKC304-02"
  205.         elif row['焊接类型'] == '承插焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["壁厚"] > 0):
  206.             df_in.at[index, '工艺卡编号'] = "HKC304-01"

  207.         elif row['焊接类型'] == '开口焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["支管壁厚"] > 6.5):
  208.             df_in.at[index, '工艺卡编号'] = "HKD304-04"
  209.         elif row['焊接类型'] == '开口焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["支管壁厚"] > 5):
  210.             df_in.at[index, '工艺卡编号'] = "HKD304-03"
  211.         elif row['焊接类型'] == '开口焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["支管壁厚"] > 3):
  212.             df_in.at[index, '工艺卡编号'] = "HKD304-02"
  213.         elif row['焊接类型'] == '开口焊' and ("304" in row["材质"] or "316" in row["材质"]) and (row["支管壁厚"] > 0):
  214.             df_in.at[index, '工艺卡编号'] = "HKD304-01"
  215.         # 304类的判断结束,接下来判断20
  216.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 13):
  217.             df_in.at[index, '工艺卡编号'] = "HKB20-06"
  218.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 10):
  219.             df_in.at[index, '工艺卡编号'] = "HKB20-05"
  220.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 8):
  221.             df_in.at[index, '工艺卡编号'] = "HKB20-04"
  222.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 5.5):
  223.             df_in.at[index, '工艺卡编号'] = "HKB20-03"
  224.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 3):
  225.             df_in.at[index, '工艺卡编号'] = "HKB20-02"
  226.         elif row['焊接类型'] == '对焊' and "20" in row["材质"] and (row["壁厚"] > 0):
  227.             df_in.at[index, '工艺卡编号'] = "HKB20-01"

  228.         elif row['焊接类型'] == '承插焊' and "20" in row["材质"] and (row["壁厚"] > 5.5):
  229.             df_in.at[index, '工艺卡编号'] = "HKC20-03"
  230.         elif row['焊接类型'] == '承插焊' and "20" in row["材质"] and (row["壁厚"] > 3):
  231.             df_in.at[index, '工艺卡编号'] = "HKC20-02"
  232.         elif row['焊接类型'] == '承插焊' and "20" in row["材质"] and (row["壁厚"] > 0):
  233.             df_in.at[index, '工艺卡编号'] = "HKC20-01"

  234.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 10):
  235.             df_in.at[index, '工艺卡编号'] = "HKD20-10"
  236.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 8):
  237.             df_in.at[index, '工艺卡编号'] = "HKD20-09"
  238.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 6.5):
  239.             df_in.at[index, '工艺卡编号'] = "HKD20-08"
  240.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 5):
  241.             df_in.at[index, '工艺卡编号'] = "HKD20-07"
  242.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 3):
  243.             df_in.at[index, '工艺卡编号'] = "HKD20-06"
  244.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 8) and (row["支管壁厚"] > 0):
  245.             df_in.at[index, '工艺卡编号'] = "HKD20-05"
  246.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 0) and (row["支管壁厚"] > 6.5):
  247.             df_in.at[index, '工艺卡编号'] = "HKD20-04"
  248.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 0) and (row["支管壁厚"] > 5):
  249.             df_in.at[index, '工艺卡编号'] = "HKD20-03"
  250.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 0) and (row["支管壁厚"] > 3):
  251.             df_in.at[index, '工艺卡编号'] = "HKD20-02"
  252.         elif row['焊接类型'] == '开口焊' and "20" in row["材质"] and (row["壁厚"] > 0) and (row["支管壁厚"] > 0):
  253.             df_in.at[index, '工艺卡编号'] = "HKD20-01"

  254.     return df_in
  255.     # if "20-GB/T8163" in row["焊缝前材质"]:
  256.     #     return "20-GB/T8163"
  257.     # elif "20-GB/T3087" in row["焊缝前材质"]:
  258.     #     return "20-GB/T3087"
  259.     # elif "20-GB53120" in row["焊缝前材质"]:
  260.     #     return "20-GB/T53"
  261.     # else:
  262.     #     return None


  263. """
  264. 这个包暂时不写,分散在程序各处
  265. def process_excel(input_file, template_file, target_folder):
  266.     df = pd.read_excel(input_file)
  267.     template_df = pd.read_excel(template_file)
  268.     #这个在后面的程序里要做组合 output_file = f"{target_folder}/output.xlsx"
  269.     df.to_excel(output_file, index=False)
  270.     print(f"已将 {input_file} 的内容保存到 {output_file}")
  271. """
  272. def copy_template_to_new_file(pipeline_number_copy, template_path_copy, output_folder_copy):
  273.           # 构建新的文件名
  274.           new_file = f"{pipeline_number_copy}.xlsx"
  275.           # 构建新文件的完整路径
  276.           #new_file_path = os.path.join(output_folder_copy, new_file)
  277.           new_file_path = f"{output_folder_copy}/{new_file}"  #实测这样写格式没有问题的,可以读到实际位置。
  278.           # 复制模板文件到新文件路径
  279.           shutil.copy(template_path_copy, new_file_path)
  280.           # 加载源文件和新文件
  281.           workbook_source = load_workbook(template_path_copy)
  282.           workbook_new = load_workbook(new_file_path)
  283.           # 复制每个 sheet 的图片
  284.           for sheet_name in workbook_source.sheetnames:
  285.                           source_sheet = workbook_source[sheet_name]
  286.                           new_sheet = workbook_new[sheet_name]

  287.                           # 提取图片并添加到新 sheet 中
  288.                           for img in source_sheet._images:
  289.                                     new_img = Image(img.ref)
  290.                                     new_img.anchor = img.anchor  # 保持原图的位置
  291.                                     new_sheet.add_image(new_img) # 添加到新表中

  292.           # 筛选出管线号对应的行
  293.           filtered_rows = df_merge[df_merge["管线号"] == pipeline_number_copy]
  294.           processcards = filtered_rows['工艺卡编号'].unique()

  295.           # 获取所有sheet名
  296.           sheet_names = workbook_new.sheetnames

  297.           # 遍历所有sheet名,检查并删除不需要的sheet
  298.           for sheet_name in sheet_names:
  299.                          if 'H' in sheet_name and sheet_name not in processcards:
  300.                                     std = workbook_new[sheet_name]  # 获取具体的sheet
  301.                                     workbook_new.remove(std) # 删除sheet
  302.                              # 这里开始尝试添加数据,找到数据集合
  303.                          #filtered_rows_od = df_merge[df_merge["管线号"] == pipeline_number_copy,df_merge["工艺卡编号"] == pipeline_number_copy]
  304.                          #processcards = filtered_rows['工艺卡编号'].unique()
  305.                          #ws = wb[current_sheet_name]

  306.           # 保存修改后的Excel文件
  307.           workbook_new.save(new_file_path)
  308.           """
  309.           这里加代码
  310.           """

  311.           #尝试取得外径壁厚的值
  312.           # 筛选出管线号对应的行
  313.           filtered_rows_OD1 = df_merge[df_merge["管线号"] == pipeline_number_copy]
  314.           processcards = filtered_rows['工艺卡编号'].unique()
  315.           workbook_new = load_workbook(new_file_path)

  316.           #sheet3.cell((7 + i), 1).value = unique_result_list[i][0]
  317.           workbook_new["封面"].cell(18,9) .value = pipeline_number_copy.removeprefix(r"/")


  318.           for sheet3 in workbook_new:
  319.               #sheet_name.cell(8,1,"好的")
  320.               #sheet_name.cell(9,1,"不好")
  321.               if 'H' in sheet3.title:
  322.                 #sheet3['C8'] = "11"
  323.                 #sheet3['C9'] = "12"
  324.                 filtered_rows_OD = df_merge[(df_merge['管线号'] == pipeline_number_copy) & (df_merge['工艺卡编号'] == sheet3.title)]

  325.                 # 提取“外径壁厚”和“焊接材质”列的值并存储到列表中
  326.                 result_list = []
  327.                 for index, row in filtered_rows_OD.iterrows():
  328.                     result_list.append((row['焊接材质'], row['外径壁厚']))
  329.                 unique_result_list = list(set(result_list))


  330.                 #这里为了测试,先避开不同壁厚的
  331.                 for i in range(0, min(len(unique_result_list ),6)):
  332.                     sheet3.cell((7 + i), 1).value = unique_result_list[i][0]
  333.                     sheet3.cell((7 + i), 5).value = unique_result_list[i][1]
  334.                 """这里不用了,改用字典
  335.                 outer_diameter_thickness_list = filtered_rows['外径壁厚'].tolist()
  336.                 welding_material_list = filtered_rows['焊接材质'].tolist()
  337.                 list_OD = filtered_rows_OD['外径壁厚'].tolist()
  338.                 list_caizhi = filtered_rows_OD['焊接材质'].tolist()
  339.                 for i in range(0,len(list_OD)):
  340.                     sheet3.cell((7 + i), 1).value = list_caizhi[i]
  341.                     sheet3.cell((7 + i), 5).value = list_OD[i]
  342.                 """
  343.           workbook_new.save(new_file_path)
  344.           print(f"已创建并保存文件:{new_file_path}")

  345. """
  346. 新增图形界面
  347. """
  348. root = tk.Tk()
  349. root.withdraw()  # 隐藏主窗口

  350. input_file = select_input_file()
  351. if not input_file:
  352.     print("未选择输入文件")
  353.     exit()

  354. """
  355. 先注释掉,后面再用,先测试做数据增加
  356. template_file = select_template_file()
  357. if not template_file:
  358.     print("未选择模板文件")
  359.     exit()
  360. """

  361. target_folder = select_target_folder()
  362. if not target_folder:
  363.     print("未选择输出文件夹")
  364.     exit()
  365. # 读取原始数据文件
  366. df_merge = pd.read_excel(input_file)
  367. df_merge = process_df(df_merge)
  368. # for index, row in df_merge.iterrows():
  369. #      if row['焊接类型'] == '对焊' or row['焊接类型'] == '承插焊':
  370. #             diam_thickness = f"Φ{row['主管外径']}*{row['壁厚']}"
  371. #             df_merge.at[index, '外径壁厚'] = diam_thickness
  372. #      elif row['焊接类型'] == '开口焊':
  373. #             diam_thickness = f"Φ{row['支管外径']}*{row['支管壁厚']}-Φ{row['主管外径']}*{row['壁厚']}"
  374. #             df_merge.at[index, '外径壁厚'] = diam_thickness

  375. output_file = f"{target_folder}/new.xlsx"

  376. df_merge.to_excel(output_file, index=False)
  377. # 获取所有不同的管线号
  378. #pipeline_ids = df_merge["管线号"].unique()   # 请确保替换为实际的列名

  379. # 定义模板文件路径和目标文件夹路径
  380. #template_file = "工艺卡模板.xlsx"
  381. #target_folder = r"D:\测试python读入读出文件\输出文件夹"

  382. """
  383. 先注释掉,后面再用,先测试做数据增加
  384. # 确保目标文件夹存在
  385. if not os.path.exists(target_folder):
  386.        os.makedirs(target_folder)

  387. # 遍历所有管线号,复制模板文件并重命名
  388. for pipeline_number in pipeline_ids:
  389.     copy_template_to_new_file(pipeline_number, template_file, target_folder)

  390. print("所有管线号对应的文件已成功创建!")
  391. """
复制代码
最佳答案
2024-9-12 17:04:50
报什么错?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-9-12 14:01:35 | 显示全部楼层
你好,鱼油!你贴出的代码有几处问题,我已为你找出并标注:

1. `filedialog.askopenfilename`方法的`filetypes`参数缺少了具体文件类型。
2. `process_df`函数中的一些赋值操作不太正确。
3. 还需在`select_input_file`和`select_template_file`中的filetypes参数中增加具体文件类型。

以下是修改后的代码:

  1. import pandas as pd
  2. import tkinter as tk
  3. from tkinter import filedialog
  4. from openpyxl import load_workbook
  5. from openpyxl.drawing.image import Image
  6. import shutil

  7. def select_input_file():
  8.     file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")], title="请选择输入数据excel,.xlsx格式")
  9.     return file_path

  10. def select_template_file():
  11.     file_path = filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")], title="请选择工艺卡模版的excel,.xlsx格式")
  12.     return file_path

  13. def select_target_folder():
  14.     folder_path = filedialog.askdirectory(title="请选择输出文件夹")
  15.     return folder_path

  16. def process_df(df_in):
  17.     for index, row in df_in.iterrows():
  18.         # 确认列名,假设有需要'某列名称'
  19.         value = row['某列名称']
  20.         
  21.         if value == '对焊' or value == '承插焊':
  22.             diam_thickness = f"Φ{value}*{value}"
  23.             df_in.at[index, '某列名称'] = diam_thickness
  24.         elif value == '开口焊':
  25.             diam_thickness = f"Φ{value}*{value}-Φ{value}*{value}"
  26.             df_in.at[index, '某列名称'] = diam_thickness

  27.         # 提取前段材质和前段材质编号
  28.         if "A105" in value:
  29.             df_in.at[index, '某列名称'] = "A105"
  30.             df_in.at[index, '某列编号'] = 20
  31.         elif "20-G" in value:
  32.             df_in.at[index, '某列名称'] = "20"
  33.             df_in.at[index, '某列编号'] = 21
  34.         elif "20G-" in value:
  35.             df_in.at[index, '某列名称'] = "20G"
  36.             df_in.at[index, '某列编号'] = 22
  37.         elif "20Ⅱ" in value:
  38.             df_in.at[index, '某列名称'] = "20Ⅱ"
  39.             df_in.at[index, '某列编号'] = 23
  40.         elif "20Ⅲ" in value:
  41.             df_in.at[index, '某列名称'] = "20Ⅲ"
  42.             df_in.at[index, '某列编号'] = 24
  43.         elif "12Cr1MoVG-" in value:
  44.             df_in.at[index, '某列名称'] = "12Cr1MoVG"
  45.             df_in.at[index, '某列编号'] = 2
  46.         elif "12Cr1MoVⅡ" in value:
  47.             df_in.at[index, '某列名称'] = "12Cr1MoVⅡ"
  48.             df_in.at[index, '某列编号'] = 3
  49.         elif "12Cr1MoVⅢ" in value:
  50.             df_in.at[index, '某列名称'] = "12Cr1MoVⅢ"
  51.             df_in.at[index, '某列编号'] = 4
  52.         elif "15CrMoG-" in value:
  53.             df_in.at[index, '某列名称'] = "15CrMoG"
  54.             df_in.at[index, '某列编号'] = 5
  55.         elif "15CrMoⅡ" in value:
  56.             df_in.at[index, '某列名称'] = "15CrMoⅡ"
  57.             df_in.at[index, '某列编号'] = 6
  58.         elif "15CrMoⅢ" in value:
  59.             df_in.at[index, '某列名称'] = "15CrMoⅢ"
  60.             df_in.at[index, '某列编号'] = 7
  61.         elif "S30408-" in value:
  62.             df_in.at[index, '某列名称'] = "S30408"
复制代码


注意事项:
1. `df_in.at[index, '列名']` 用于指定特定单元格,确保列名正确。
2. `row` 是一个 Series,`row['某列名称']` 表示访问指定列的值,要确认列名是否正确。
3. 确认“某列名称”和“某列编号”的列名是否与实际数据表对应。

尝试修改这些问题再运行看是否成功,如果还有问题,请提供更详细的错误信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-12 17:04:50 | 显示全部楼层    本楼为最佳答案   
报什么错?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-14 09:06:53 | 显示全部楼层
后来自己解决了,都记不起怎么解决的了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表