2016-08-21 194 views
2

该函数被多次调用。我保留一个计数,以便第一次呼叫时,创建一个工作簿。然后我使用pd.ExcelWrite()写入该工作簿。下一次执行else:并打开相同的工作簿。它的第一张纸被选中,最后一行被找到。 DataFrame写在该行上。 这是我的代码:如何将数据框追加到现有的Excel表单中?

def WriteFile (df): 
    if count1 == 1: 
     workbook = xlsxwriter.Workbook('pandas_simple.xlsx') 
     writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter') 
     df.to_excel(writer, index=False) 
     workbook.close() 
    else: 
     book = open_workbook('pandas_simple.xlsx') 
     sheet_names = book.sheet_names() 
     sheet = book.sheet_by_name(sheet_names[0]) 
     row = sheet.nrows 
     writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter') 
     df.to_excel(writer, index=False, header=False, startrow = row) 

我得到这个异常:

Exception Exception: Exception('Exception caught in workbook destructor. Explicit close() 
may be required for workbook.',) in <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook 
object at 0x000000000A143860>> ignored Exception 

而且我pandas_simple.xlsx也是代码执行后是空的。我究竟做错了什么?

+0

[如何写入现有的excel文件而不覆盖数据(使用熊猫)?](http://stackoverflow.com/questions/20219254/how-to-write-to-an-existing-excel-file -without-overwrite-data-using-pandas) – Merlin

+0

这个异常很可能是由于不通过'close()'或Pandas'save()'调用XlsxWriter工作簿析构函数造成的。该错误消息试图暗示这一点。它可能无法解决您的整体问题,但作为第一步,您应该添加'close()'或'save()'来解决异常。 – jmcnamara

+0

此外,您不能使用XlsxWriter重写或附加到文件,您只会得到一个新文件。 – jmcnamara

回答

2

感谢@ski。

请参考上同样的问题他答

How to write to an existing excel file without overwriting data (using pandas)?

import pandas 
from openpyxl import load_workbook 

book = load_workbook('Masterfile.xlsx') 
writer = pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl') 
writer.book = book 
writer.sheets = dict((ws.title, ws) for ws in book.worksheets) 

data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2']) 

writer.save() 
+0

这种方法不起作用。我有一个数据帧,我需要在xlsx文件中写入。这项工作正在循环中完成。 Dataframe被重新加载,现在需要被添加到同一个xlsx文件中。 – EL323

2

你能做到这样:

df = pd.DataFrame(np.arange(1, 31), columns=['val']) 
fn = 'd:/temp/test.xlsx' 
count = 0 

writer = pd.ExcelWriter(fn) 

for chunk in np.split(df, 3): 
    chunk.to_excel(writer, index=False, header=(count==0), startrow=count+(count!=0)) 
    count += len(chunk) 

writer.save() 

结果:

enter image description here

相关问题