Python 将Openpyxl与现有工作簿一起使用的Excel编写器
我有一段时间以前的代码,我正在为一项新任务重新使用它。任务是将一个新的数据框写入一个新的工作表,并写入一个现有的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 =
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程序,无论何时保存,它都会编写一个全新的文件。恰好,全新的文件可以与旧文件具有完全相同的名称,在这种情况下,似乎文件已“更新”,但实际上旧文件已被新文件覆盖。