Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用dataframe覆盖excel工作表而不影响其他工作表_Python_Excel_Pandas_Openpyxl - Fatal编程技术网

Python 使用dataframe覆盖excel工作表而不影响其他工作表

Python 使用dataframe覆盖excel工作表而不影响其他工作表,python,excel,pandas,openpyxl,Python,Excel,Pandas,Openpyxl,我想用数据框覆盖excel文件中的现有工作表,但不想对同一文件的其他工作表进行任何更改。如何做到这一点。 我尝试了下面的代码,但没有覆盖,而是将数据附加到“Sheet2”中 import pandas as pd from openpyxl import load_workbook book = load_workbook('sample.xlsx') writer = pd.ExcelWriter('sample.xlsx', engine = 'openpyxl') writer.book

我想用数据框覆盖excel文件中的现有工作表,但不想对同一文件的其他工作表进行任何更改。如何做到这一点。 我尝试了下面的代码,但没有覆盖,而是将数据附加到“Sheet2”中

import pandas as pd
from openpyxl import load_workbook

book = load_workbook('sample.xlsx')
writer = pd.ExcelWriter('sample.xlsx', engine = 'openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
df.to_excel(writer, 'sheet2', index = False)
writer.save()

我没有找到任何其他的选择,除了这个,这将是一个快速的解决方案为您

我相信仍然没有直接的方法可以做到这一点,如果我错了,请纠正我。这就是为什么我们需要以合乎逻辑的方式来处理这个问题

import pandas as pd

def write_excel(filename,sheetname,dataframe):
    with pd.ExcelWriter(filename, engine='openpyxl', mode='a') as writer: 
        workBook = writer.book
        try:
            workBook.remove(workBook[sheetname])
        except:
            print("Worksheet does not exist")
        finally:
            dataframe.to_excel(writer, sheet_name=sheetname,index=False)
            writer.save()

df = pd.DataFrame({'Col1':[1,2,3,4,5,6], 'col2':['foo','bar','foobar','barfoo','foofoo','barbar']})

write_excel('PRODUCT.xlsx','PRODUCTS',df)

如果您觉得这有帮助,请告诉我,如果您需要其他更好的解决方案,请告诉我。

我尝试过这一方法,但它删除了文件中的所有其他工作表否,当然不是。我试过了。你传递了正确的纸名吗?这是我迄今为止看到的最好的答案。真的很有帮助!