2016-08-21 12 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 без перезаписи данных (с помощью pandas)?] (Http://stackoverflow.com/questions/20219254/how-to-write-to-an-existing-excel-file -without-overwriting-data-using-pandas) – Merlin

+0

Исключение, скорее всего, вызвано не вызовом деструктора рабочей книги XlsxWriter через 'close()' или Pandas 'save()'. Сообщение об ошибке пытается намекнуть на это. Это может не решить вашу общую проблему, но в качестве первого шага вам следует добавить '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

Этот подход не будет работать. У меня есть dataframe, который мне нужно записать в файле 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

 Смежные вопросы

  • Нет связанных вопросов^_^