python代码: 1. 使用excel进行文档管理,可以添加供应商,A列序号,B列项目名称,C列供应商名称,D列需求总条数,E列FC条数,F列NC条数 2. 可以修改某个供应商的FC条数,NC条数 3. 可以删除某个供应商的数据 4. 可以对同一个文档根据FC条数进行排序 5. 可以对同一个文档根据NC条数进行排序 6. 可以查看某个供应商的数据 7. 需要有输入合法性校验 8. 需要根据C, E列生成数据透视图到新的sheet页 9. 需要根据C, F列生成数据透视图到新的sheet页 10. 需要根据C, E列生成折线图到新的sheet页 11. 需要根据C, F列生成折线图到新的sheet页 12. 需要根据C,E,F列生成柱状图到新的sheet页
时间: 2024-03-25 09:40:15 浏览: 47
这是一份比较复杂的Excel文档管理的Python代码,需要使用到一些第三方库,比如openpyxl、pandas和matplotlib等。以下是一个简单的实现方案:
```python
import openpyxl
import pandas as pd
import matplotlib.pyplot as plt
# 打开Excel文件
wb = openpyxl.load_workbook('file.xlsx')
# 选择第一个工作表
ws = wb.active
# 添加供应商
def add_supplier():
row = ws.max_row + 1
ws.cell(row=row, column=1).value = row - 1
ws.cell(row=row, column=2).value = input("请输入项目名称:")
ws.cell(row=row, column=3).value = input("请输入供应商名称:")
ws.cell(row=row, column=4).value = int(input("请输入需求总条数:"))
ws.cell(row=row, column=5).value = int(input("请输入FC条数:"))
ws.cell(row=row, column=6).value = int(input("请输入NC条数:"))
print("添加成功!")
# 修改供应商的FC条数和NC条数
def edit_supplier():
supplier = input("请输入要修改的供应商名称:")
for row in ws.iter_rows(min_row=2, max_col=6, values_only=True):
if row[2] == supplier:
ws.cell(row=row[0], column=5).value = int(input("请输入修改后的FC条数:"))
ws.cell(row=row[0], column=6).value = int(input("请输入修改后的NC条数:"))
print("修改成功!")
break
else:
print("找不到该供应商!")
# 删除供应商数据
def delete_supplier():
supplier = input("请输入要删除的供应商名称:")
for row in ws.iter_rows(min_row=2, max_col=6, values_only=True):
if row[2] == supplier:
ws.delete_rows(row[0], 1)
print("删除成功!")
break
else:
print("找不到该供应商!")
# 根据FC条数排序
def sort_by_fc():
df = pd.DataFrame(ws.values)
df.columns = df.iloc[0]
df = df.drop(0)
df = df.astype({'FC条数': 'int'})
df = df.sort_values(by='FC条数', ascending=False)
ws.clear()
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
# 根据NC条数排序
def sort_by_nc():
df = pd.DataFrame(ws.values)
df.columns = df.iloc[0]
df = df.drop(0)
df = df.astype({'NC条数': 'int'})
df = df.sort_values(by='NC条数', ascending=False)
ws.clear()
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
# 查看某个供应商的数据
def view_supplier_data():
supplier = input("请输入要查看的供应商名称:")
for row in ws.iter_rows(min_row=2, max_col=6, values_only=True):
if row[2] == supplier:
print(f"项目名称:{row[1]},供应商名称:{row[2]},需求总条数:{row[3]},FC条数:{row[4]},NC条数:{row[5]}")
break
else:
print("找不到该供应商!")
# 输入合法性校验
def input_validator():
while True:
try:
value = int(input("请输入一个整数:"))
break
except ValueError:
print("输入有误,请重新输入!")
return value
# 生成数据透视图
def generate_pivot_table():
df = pd.DataFrame(ws.values)
df.columns = df.iloc[0]
df = df.drop(0)
df = df.astype({'FC条数': 'int', 'NC条数': 'int'})
pivot_e = pd.pivot_table(df, index='供应商名称', values='FC条数', aggfunc='sum')
pivot_f = pd.pivot_table(df, index='供应商名称', values='NC条数', aggfunc='sum')
with pd.ExcelWriter('file.xlsx', engine='openpyxl', mode='a') as writer:
pivot_e.to_excel(writer, sheet_name='FC数据透视图')
pivot_f.to_excel(writer, sheet_name='NC数据透视图')
# 生成折线图和柱状图
def generate_charts():
df = pd.DataFrame(ws.values)
df.columns = df.iloc[0]
df = df.drop(0)
df = df.astype({'FC条数': 'int', 'NC条数': 'int'})
fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(6, 8))
ax1.plot(df['供应商名称'], df['FC条数'], 'o-', label='FC条数')
ax1.plot(df['供应商名称'], df['NC条数'], 'o-', label='NC条数')
ax1.legend()
ax1.set_xlabel('供应商名称')
ax1.set_ylabel('条数')
ax2.bar(df['供应商名称'], df['FC条数'], label='FC条数')
ax2.bar(df['供应商名称'], df['NC条数'], label='NC条数', bottom=df['FC条数'])
ax2.legend()
ax2.set_xlabel('供应商名称')
ax2.set_ylabel('条数')
with pd.ExcelWriter('file.xlsx', engine='openpyxl', mode='a') as writer:
plt.savefig('chart.png')
worksheet = writer.book.create_sheet('图表')
worksheet.add_image(openpyxl.drawing.image.Image('chart.png'), 'A1')
writer.save()
# 主程序
while True:
print("请选择操作:")
print("1. 添加供应商")
print("2. 修改供应商的FC条数和NC条数")
print("3. 删除供应商数据")
print("4. 根据FC条数排序")
print("5. 根据NC条数排序")
print("6. 查看某个供应商的数据")
print("7. 退出程序")
choice = input_validator()
if choice == 1:
add_supplier()
elif choice == 2:
edit_supplier()
elif choice == 3:
delete_supplier()
elif choice == 4:
sort_by_fc()
elif choice == 5:
sort_by_nc()
elif choice == 6:
view_supplier_data()
elif choice == 7:
break
else:
print("输入有误,请重新输入!")
# 生成数据透视图和图表
generate_pivot_table()
generate_charts()
# 保存Excel文件
wb.save('file.xlsx')
```
这份代码实现了添加、修改、删除、排序、查看和生成数据透视图、折线图、柱状图等功能。您可以根据实际需求进行修改和扩展。
阅读全文