Allow ExcelWriter() to add sheets to existing workbook · Issue #3441 · pandas-dev/pandas (original) (raw)
The ability of ExcelWriter to save different dataframes to different worksheets is great for sharing those dfs with the python-deficient. But this quickly leads to a need to add worksheets to an existing workbook, not just creating one from scratch; something like:
df0=pd.DataFrame(np.arange(3))
df0.to_excel('foo.xlsx','Data 0')
df1=pd.DataFrame(np.arange(2))
df1.to_excel('foo.xlsx','Data 1')
The following little diff to io/parsers.py implements this behavior for *.xlsx files:
diff --git a/pandas/io/parsers.py b/pandas/io/parsers.py
index 89f892d..7f010ee 100644
--- a/pandas/io/parsers.py
+++ b/pandas/io/parsers.py
@@ -2099,12 +2099,19 @@ class ExcelWriter(object):
self.fm_date = xlwt.easyxf(num_format_str='YYYY-MM-DD')
else:
from openpyxl.workbook import Workbook
- self.book = Workbook() # optimized_write=True)
- # open pyxl 1.6.1 adds a dummy sheet remove it
- if self.book.worksheets:
- self.book.remove_sheet(self.book.worksheets[0])
+ from openpyxl.reader.excel import load_workbook
+
+ try:
+ self.book=load_workbook(filename = path)
+ self.sheets={wks.title:wks for wks in self.book.worksheets}
+ except InvalidFileException:
+ self.book = Workbook() # optimized_write=True)
+ # open pyxl 1.6.1 adds a dummy sheet remove it
+ if self.book.worksheets:
+ self.book.remove_sheet(self.book.worksheets[0])
+ self.sheets = {}
+
self.path = path
- self.sheets = {}
self.cur_sheet = None
Doing this for *.xls files is a little harder.