Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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 将Openpyxl与现有工作簿一起使用的Excel编写器_Python_Excel_Pandas_Openpyxl_Xlsxwriter - Fatal编程技术网

Python 将Openpyxl与现有工作簿一起使用的Excel编写器

Python 将Openpyxl与现有工作簿一起使用的Excel编写器,python,excel,pandas,openpyxl,xlsxwriter,Python,Excel,Pandas,Openpyxl,Xlsxwriter,我有一段时间以前的代码,我正在为一项新任务重新使用它。任务是将一个新的数据框写入一个新的工作表,并写入一个现有的excel文件。但代码中有一部分我不理解,但它只是让代码“起作用” 工作: from openpyxl import load_workbook import pandas as pd file = r'YOUR_PATH_TO_EXCEL_HERE' df1 = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]}) book =

我有一段时间以前的代码,我正在为一项新任务重新使用它。任务是将一个新的数据框写入一个新的工作表,并写入一个现有的excel文件。但代码中有一部分我不理解,但它只是让代码“起作用”

工作:

from openpyxl import load_workbook
import pandas as pd
file = r'YOUR_PATH_TO_EXCEL_HERE'

df1 = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})
book = load_workbook(file)
writer = pd.ExcelWriter(file, engine='openpyxl')
writer.book = book # <---------------------------- piece i do not understand
df1.to_excel(writer, sheet_name='New', index=None)
writer.save()
从openpyxl导入加载\u工作簿
作为pd进口熊猫
file=r'您的路径\u到\u EXCEL\u此处'
df1=pd.DataFrame({'Data':[10,20,30,20,15,30,45]})
book=加载工作簿(文件)
writer=pd.ExcelWriter(文件,engine='openpyxl')

writer.book=book#在ExcelWriter的源代码中,它使用openpyxl初始化空工作簿并删除所有工作表。这就是为什么需要显式地添加它

class _OpenpyxlWriter(ExcelWriter):
    engine = 'openpyxl'
    supported_extensions = ('.xlsx', '.xlsm')

    def __init__(self, path, engine=None, **engine_kwargs):
        # Use the openpyxl module as the Excel writer.
        from openpyxl.workbook import Workbook

        super(_OpenpyxlWriter, self).__init__(path, **engine_kwargs)

        # Create workbook object with default optimized_write=True.
        self.book = Workbook()

        # Openpyxl 1.6.1 adds a dummy sheet. We remove it.
        if self.book.worksheets:
            try:
                self.book.remove(self.book.worksheets[0])
            except AttributeError:

                # compat
                self.book.remove_sheet(self.book.worksheets[0])

我认为panda只会使用编写器将数据写入新书,因此,如果您不指定该书已经有数据,则可以编写现有的书。我不知道有什么方法可以防止panda覆盖整个工作簿。这是非常好的了解@很高兴我能帮上忙!我觉得这也很整洁。现在,我要深入了解为什么这是可行的,以及在我弄明白这一点后我如何扩展它!就理解正在发生的事情而言,值得注意的是,没有“指定书中已经有数据”这样的事情。即使您使用的是Microsoft的正版Excel程序,无论何时保存,它都会编写一个全新的文件。恰好,全新的文件可以与旧文件具有完全相同的名称,在这种情况下,似乎文件已“更新”,但实际上旧文件已被新文件覆盖。