2016-12-23 1 views
1

を通じて秀でる保存することはできません、私はこの質問の下の回答をお読みください。How to write to an existing excel file without overwriting data (using pandas)?は、私が存在するデータフレームを追加しようとするファイルをエクセルwriter.save

filename = 'template.xlsx' 
wb_target = load_workbook(filename) 

writer = pd.ExcelWriter(filename, engine='openpyxl') 
writer.wb_target = wb_target 
writer.sheets = dict((ws.title, ws) for ws in wb_target.worksheets) 

df_selection2.to_excel(writer,sheet_name='Selection',startrow=7, startcol=6,header=False, index=False) 
writer.save() 

しかしstilllいくつかの問題があります。

IndexError        Traceback (most recent call last) 
<ipython-input-3-3ca40cf2bef3> in <module>() 
    17 
    18 df_selection2.to_excel(writer,sheet_name='Selection',startrow=7, startcol=6,header=False, index=False) 
---> 19 writer.save() 
    20 
    21 #df_selection2.to_excel(writer,sheet_name='Selection',startrow=7, startcol=6,header=False, index=False) 

C:\Anaconda3\lib\site-packages\pandas\io\excel.py in save(self) 
    725   Save workbook to disk. 
    726   """ 
--> 727   return self.book.save(self.path) 
    728 
    729  def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0): 

C:\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py in save(self, filename) 
    337    save_dump(self, filename) 
    338   else: 
--> 339    save_workbook(self, filename) 
    340 
    341 

C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py in save_workbook(workbook, filename) 
    266  archive = ZipFile(filename, 'w', ZIP_DEFLATED, allowZip64=True) 
    267  writer = ExcelWriter(workbook, archive) 
--> 268  writer.save(filename) 
    269  return True 
    270 

C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py in save(self, filename) 
    248  def save(self, filename): 
    249   """Write data into the archive.""" 
--> 250   self.write_data() 
    251   self.archive.close() 
    252 

C:\Anaconda3\lib\site-packages\openpyxl\writer\excel.py in write_data(self) 
    91   archive.writestr(ARC_STYLE, tostring(stylesheet)) 
    92 
---> 93   archive.writestr(ARC_WORKBOOK, write_workbook(self.workbook)) 
    94   archive.writestr(ARC_WORKBOOK_RELS, write_workbook_rels(self.workbook)) 
    95 

C:\Anaconda3\lib\site-packages\openpyxl\writer\workbook.py in write_workbook(workbook) 
    86 
    87  # book views 
---> 88  active = get_active_sheet(wb) 
    89  view = BookView(activeTab=active) 
    90  root.bookViews =[view] 

C:\Anaconda3\lib\site-packages\openpyxl\writer\workbook.py in get_active_sheet(wb) 
    58  """ 
    59  idx = wb._active_sheet_index 
---> 60  sheet = wb.active 
    61  if sheet.sheet_state == "visible": 
    62   return idx 

C:\Anaconda3\lib\site-packages\openpyxl\workbook\workbook.py in active(self) 
    128  def active(self): 
    129   """Get the currently active sheet""" 
--> 130   return self._sheets[self._active_sheet_index] 
    131 
    132  @active.setter 

IndexError: list index out of range 

これは、変更したいタブが隠れているためですか?

+0

タブを非表示にしてデータフレームをExcelに保存してみましたか? – Parfait

答えて

0

問題は、変数wb_targetload_workbookを割り当てて、wb_targetという名前のwriterという属性に割り当てようとしていることです。 writerにはデフォルトでその属性がありません。あなたがそれを割り当てたら、あなたはそれを作成しました。これは良いところを導くつもりはない。

代わりに、正しい属性(book)に割り当てる必要があります。この例では、使用する変数がbookだったので混乱していました。そのため、これらの2つが同じである必要があると仮定している可能性があります。彼らはしない!

これはコードが書き直されたもので、正常に動作するはずです。

import pandas as pd 
import numpy as np 
from openpyxl import load_workbook 

filename = 'template.xlsx' 
wb_target = load_workbook(filename) 

writer = pd.ExcelWriter(filename, engine='openpyxl') 
# my key change 
writer.book = wb_target 
writer.sheets = dict((ws.title, ws) for ws in wb_target.worksheets) 

df_selection2.to_excel(
    writer, sheet_name='Selection', startrow=7, 
    startcol=6, header=False, index=False) 
writer.save() 
関連する問題