繁体   English   中英

根据用户输入,使用 python 修改和更新 excel 中的单元格

[英]Modify and update a cell in excel using python based on a users input

import pandas as pd
from openpyxl import load_workbook

#This is how to make a new dataframe and transfer it to a demo excel file in sheet1

# dataframe Name and Age columns
df = pd.DataFrame({'#': [1, 2, 3, 4], 'Name': ['John Doe', 'Jamie Perkins', 'Daryl Walker', 'Dave Mann'], 'Age': [10, 20, 30, 45]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.save()


#Up next is how to add new information to a sheet1


# new dataframe with same columns
df2 = pd.DataFrame({'#': [5, 6, 7, 8], 'Name': ['E','F','G','H'], 'Age': [100,70,40,60]})
writer = pd.ExcelWriter('demo.xlsx', engine='openpyxl')

# try to open an existing workbook
writer.book = load_workbook('demo.xlsx')

# copy existing sheets
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)

# read existing file
reader = pd.read_excel(r'demo.xlsx')

# write out the new sheet
df2.to_excel(writer,index=False,header=False,startrow=len(reader)+1)

writer.close()


#What I want to figure out is how to modify a name based on input from user and update the information to the existing cell in the excel file

num = input("Which name do you want to change?(choose a number)\n")

number = int(num)

if number == 1:
    nName = input("What is the new Name\n")

    df3 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df3.to_excel(writer,index=False,header=False,startrow=1)
    writer.close()

elif number == 2:
    nName = input("What is the new Name\n")

    df4 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df4.to_excel(writer,index=False,header=False,startrow=2)
    writer.close()

elif number == 3:
    nName = input("What is the new Name\n")

    df5 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df5.to_excel(writer,index=False,header=False,startrow=3)
    writer.close()

elif number == 4:
    nName = input("What is the new Name\n")

    df6 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df6.to_excel(writer,index=False,header=False,startrow=4)
    writer.close()

elif number == 5:
    nName = input("What is the new Name\n")

    df7 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df7.to_excel(writer,index=False,header=False,startrow=5)
    writer.close()

elif number == 6:
    nName = input("What is the new Name\n")

    df8 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df8.to_excel(writer,index=False,header=False,startrow=6)
    writer.close()

elif number == 7:
    nName = input("What is the new Name\n")

    df9 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df9.to_excel(writer,index=False,header=False,startrow=7)
    writer.close()

elif number == 8:
    nName = input("What is the new Name\n")

    df10 = pd.DataFrame({'Name': [nName]})

    writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')
    writer.book = load_workbook('demo.xlsx')
    reader = pd.read_excel(r'demo.xlsx')
    df10.to_excel(writer,index=False,header=False,startrow=8)
    writer.close()

else:
    print("Wrong input please try again")

我知道如何制作一个新的 dataframe 并将其传输到演示 excel 文件并将其命名为 sheet1。 我也知道如何将 append 新数据放入当前现有的 excel 文件中。

我想知道的是如何根据用户的输入修改单元格并将信息更新到 excel 文件中的现有单元格。 使用 if 语句似乎可行,但不会更新 excel 文件。 我还想知道除了使用很多 else if 之外是否还有更简单的方法。 我只想一次改一个名字。

我会很感激我能得到的任何帮助!

编辑:感谢您对语法的反馈不幸的是,我仍然遇到 excel 文件未更新的错误,终端上没有错误但它没有更新。

当我运行您的代码时,我得到了一个包含更新数据的新工作表“Sheet11”,因此您需要在 to_excel 中指定工作表名称和 startcol。

如果您的 excel 很小,您可以修改 DataFrame 并每次重写整个工作表。 下面我将 2 个 DataFrame 连接成一个,然后从那里修改。

#What I want to figure out is how to modify a name based on input from user and update the information to the existing cell in the excel file
df = pd.concat([df, df2], ignore_index=True)
print(df)

num = input("Which name do you want to change?(choose a number)\n")
number = int(num)

writer = pd.ExcelWriter('demo.xlsx', engine ='openpyxl')

if number in [1, 2, 3, 4, 5, 6, 7, 8]:
    nName = input("What is the new Name\n")
    df.loc[df['#']==number, 'Name'] = nName
    print(df)
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    writer.close()
else:
    print("Wrong input please try again")

编辑:如果您只想更新一个单元格,这有效:

#What I want to figure out is how to modify a name based on input from user and update the information to the existing cell in the excel file
df = pd.concat([df, df2], ignore_index=True)
print(df)
num = input("Which name do you want to change?(choose a number)\n")
number = int(num)

writer = pd.ExcelWriter('demo.xlsx', engine='openpyxl')
#Need to load the workbook, or it overwrites all data on the sheet.
writer.book = load_workbook('demo.xlsx')
#Evidently need to load the sheet names in order to write to an existing sheet
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets) 

if number in [1, 2, 3, 4, 5, 6, 7, 8]:
    nName = input("What is the new Name\n")
    df.loc[df['#']==number, 'Name'] = nName
    print(df)
    df.loc[df['#']==number, 'Name'].to_excel(writer, sheet_name='Sheet1', index=False, header=None, startrow=number, startcol=1)
    writer.save()
else:
    print("Wrong input please try again")

writer.book = load_workbook('demo.xlsx')的要求是否意味着作者每次都在重写整本书?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM