Je souhaite ajouter des enregistrements à un fichier Excel et j'utilise pandas.ExcelWriter
pour ce faire ( http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.ExcelWriter.html?highlight=excelwriter#pandas.ExcelWriter ):
import pandas as pd
df = pd.DataFrame(data={'a':[4], 'b':['corn'], 'c':[0.5]})
with pd.ExcelWriter("test.xlsx", mode='a') as writer:
df.to_Excel(writer)
a, b, c sont les noms de titres de test.xlsx
exécutez ce programme, augmentez une valeurError:
ValueError Traceback (most recent call last)
<ipython-input-3-c643d22b4217> in <module>
----> 1 with pd.ExcelWriter("test.xlsx", mode='a') as writer:
2 df.to_Excel(writer)
3
~/anaconda/lib/python3.6/site-packages/pandas/io/Excel.py in __init__(self, path, engine, date_format, datetime_format, mode, **engine_kwargs)
1935
1936 if mode == 'a':
-> 1937 raise ValueError('Append mode is not supported with xlsxwriter!')
1938
1939 super(_XlsxWriter, self).__init__(path, engine=engine,
ValueError: Append mode is not supported with xlsxwriter!
Je ne sais pas pourquoi?
Essayez avec ceci:
with pd.ExcelWriter("existing_file_name.xlsx", engine="openpyxl", mode="a") as writer:
df.to_Excel(writer, sheet_name="name", startrow=num, startcol=num)
Vous devez spécifier le moteur comme "openpyxl".
Comme le dit le retraçage, ValueError: Append mode is not supported with xlsxwriter!
Je ne peux pas répondre à votre question, pourquoi, ceci est une décision des développeurs Pandas.
Mais j'ai pu faire fonctionner votre cas d'utilisation avec Pandas 0.24 et openpyxl
:
df = pd.DataFrame(data={'a':[4], 'b':['corn'], 'c':[0.5]})
with pd.ExcelWriter("test.xlsx", mode='a') as writer:
df.to_Excel(writer)
Essayez de spécifier le "moteur" comme openpyxl:
with pd.ExcelWriter("test.xlsx", engine='openpyxl', mode='a') as writer:
df.to_Excel(writer)
hum, je suis presque sûr que vous ne pourriez pas utiliser la fonction ajouter à un fichier xlsx existant avec xlsxwriter, car la bibliothèque xlsxwriter est uniquement destinée à l'écriture de fichiers Excel
afin que vous puissiez utiliser openpyxl ou mieux écrire votre programme pour faire cette fonction ..
mais si vous regardez le code à l'intérieur de ce libray, il lit simplement le fichier dans un environnement temporaire avant d'écrire le fichier final, ce n'est pas un vrai ajout ...