如图所示,在B3至E3中输入物料代号及物料的长宽高,然后Excel根据输入的物料代号跳转到相对应的区域,并使用输入的物料的长宽高与可用包装型号的适用范围进行比较,自动选择合适的包装型号并显示在F3单元格中(若出现多个合适型号,则依次在F4,F5....中显现)。举例:输入代号2222,输入长3,宽2,厚6,自动跳转到(D10:I12)区域,然后在区域内用3,2,6三个数逐行比较,找到三个数均在其适用范围内的包装型号,即gb,然后将gb显示在F3中,结束。
引用chatGPT作答,要使用 Pandas 在 Excel 中实现此功能,需要进行以下步骤:
1.读取 Excel 文件中的数据,并将其存储为 Pandas DataFrame。
2.从 B3 至 E3 的单元格中获取物料代号及物料的长宽高,同时获取包装型号与其适用范围的数据。
3.根据物料代号,查找相应的区域,并将其转换为 DataFrame。
4.遍历区域内的每一行,将长、宽、高与适用范围进行比较,找到合适的包装型号。
5.如果存在多个合适的包装型号,则将它们依次显示在 F4、F5、F6…… 单元格中。
6.如果没有找到任何合适的包装型号,则在 F3 单元格中显示“无可用包装型号”。
以下是一种可能的实现方法:
import pandas as pd
# 读取 Excel 文件中的数据,并将其存储为 Pandas DataFrame。
df = pd.read_excel("data.xlsx", sheet_name="Sheet1", header=None)
# 从 B3 至 E3 的单元格中获取物料代号及物料的长宽高。
material_code = df.iloc[2, 1]
length = df.iloc[2, 2]
width = df.iloc[2, 3]
height = df.iloc[2, 4]
# 获取包装型号与其适用范围的数据。
packaging_df = df.iloc[5:, 3:9].dropna()
# 根据物料代号,查找相应的区域,并将其转换为 DataFrame。
material_area = df.loc[df[0] == material_code, [3, 4, 5, 6, 7, 8]]
material_area.columns = ["Length Min", "Length Max", "Width Min", "Width Max", "Height Min", "Height Max"]
material_area = material_area.dropna()
# 遍历区域内的每一行,将长、宽、高与适用范围进行比较,找到合适的包装型号。
suitable_packaging = []
for index, row in packaging_df.iterrows():
if row["Length Min"] <= length <= row["Length Max"] and \
row["Width Min"] <= width <= row["Width Max"] and \
row["Height Min"] <= height <= row["Height Max"]:
suitable_packaging.append(row["Packaging Type"])
# 如果存在多个合适的包装型号,则将它们依次显示在 F4、F5、F6…… 单元格中。
if suitable_packaging:
for i, packaging in enumerate(suitable_packaging):
df.iloc[2+i, 5] = packaging
# 如果没有找到任何合适的包装型号,则在 F3 单元格中显示“无可用包装型号”。
else:
df.iloc[2, 5] = "无可用包装型号"
# 将结果写回 Excel 文件中。
df.to_excel("data.xlsx", sheet_name="Sheet1", index=False, header=False)
这东西用pandas读可以,但写不规则表,还是不方便
dirname=r'C:\Users\Administrator\Desktop'
import pandas as pd
import pandasql as pdsql
df1 = pd.read_excel(dirname + r'\uuu.xlsx', header = 0, skiprows = 1, nrows =2)
df1 = df1.iloc[:, 1:]
code,l,w,h,_ = df1.iloc[0, :].tolist()
code,l,w,h = int(code), int(l), int(w), int(h)
df = pd.read_excel(dirname + r'\uuu.xlsx', header=0,skiprows=5, )
df = df.iloc[:, 1:]
sql = f"""
SELECT *
FROM df
WHERE 代号={code}
and (适用长度最小值<={l} and 适用长度最大值>={l})
and (适用宽度最小值<={w} and 适用宽度最大值>={w})
and (适用厚度最小值<={h} and 适用厚度最大值>={h})
"""
res = (lambda x: pdsql.sqldf(x, globals()))(sql)
rr = res['包装可用型号'].tolist()
print(rr)
"""--result
['gb']
"""
该回答引用chatgpt:以下是大致的思路:
读取Excel文件并将其转换为DataFrame格式。
从B3:E3单元格中读取输入的物料代号及长宽高。
使用.loc函数在DataFrame中查找与输入的物料代号相符的区域。
在找到的区域中逐行比较物料的长宽高与适用范围,并将合适的包装型号存储在列表中。
将列表中的包装型号写入F3,F4,F5...单元格中。
以下是大致的代码示例:
import pandas as pd
from openpyxl import load_workbook
# 读取Excel文件
file = 'example.xlsx'
df = pd.read_excel(file, sheet_name='Sheet1', index_col=0)
# 读取输入的物料代号及长宽高
code = df.loc['Code', 'B':'E'].values[0]
length = df.loc['Length', 'B':'E'].values[0]
width = df.loc['Width', 'B':'E'].values[0]
height = df.loc['Height', 'B':'E'].values[0]
# 查找与输入的物料代号相符的区域
area = df.loc[df.index == code]
# 比较物料的长宽高与适用范围,并将合适的包装型号存储在列表中
packaging = []
for i, row in area.iterrows():
if row['Length_min'] <= length <= row['Length_max'] and \
row['Width_min'] <= width <= row['Width_max'] and \
row['Height_min'] <= height <= row['Height_max']:
packaging.append(row['Packaging'])
# 写入F3,F4,F5...单元格中
wb = load_workbook(file)
ws = wb['Sheet1']
for i, pack in enumerate(packaging):
cell = ws.cell(row=3+i, column=6)
cell.value = pack
wb.save(file)
实时输入输出在exce可能不行,在shell或者gui窗口可以哦
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
使用Pandas实现以上功能,可以通过以下步骤完成:
1.读取Excel文件并将包装数据存储为pandas DataFrame。
import pandas as pd
df = pd.read_excel('file_name.xlsx', sheet_name='packaging_data')
2.创建函数以查找适合的包装型号。
def locate_packaging_type(df, item_code, length, width, height):
# 获取与物料代号相关的行
item_row = df[df['item_code'] == item_code]
# 获取适合该物料的所有包装
suitable_packaging = item_row[(item_row['min_length'] <= length) & (item_row['max_length'] >= length) &
(item_row['min_width'] <= width) & (item_row['max_width'] >= width) &
(item_row['min_height'] <= height) & (item_row['max_height'] >= height)]
# 返回适合物料的所有包装类型
return suitable_packaging['packaging_type'].tolist()
3.创建函数以获取物料代号的区域范围。
def locate_item_range(df, item_code):
# 获取与物料代号相关的行
item_row = df[df['item_code'] == item_code]
# 获取物料的范围
start_row, end_row, start_column, end_column = item_row.iloc[0][['start_row', 'end_row', 'start_column', 'end_column']]
return start_row, end_row, start_column, end_column
4.创建函数以将选择的包装类型在Excel中显示。
def display_packaging_type(selected_packaging, starting_cell):
for i, packaging in enumerate(selected_packaging):
cell = starting_cell.offset(i, 0)
cell.value = packaging
5.创建主程序以调用上述函数并处理输入数据。
import openpyxl as xl
# 打开Excel文件
wb = xl.load_workbook('file_name.xlsx')
ws = wb['sheet_name']
# 输入物料代号,以及物料的长,宽,高
item_code = ws['B3'].value
length = ws['C3'].value
width = ws['D3'].value
height = ws['E3'].value
# 获取物料的区域范围
start_row, end_row, start_column, end_column = locate_item_range(df, item_code)
starting_cell = ws.cell(start_row + 1, start_column + 1)
# 在物料的区域范围内查找适合该物料的包装类型
suitable_packaging = locate_packaging_type(df, item_code, length, width, height)
# 显示选定的包装类型
display_packaging_type(suitable_packaging, ws['F3'])
# 保存Excel文件
wb.save('file_name.xlsx')
上述代码仅作为示例,可以根据具体情况进行修改和调整。
如果我的回答解决了您的问题,请采纳!