2012-08-12 165 views
4

我有一個簡單的用例df.to_excel(),我正在努力。我想寫入一個現有XLSX工作簿的特定工作表選項卡(我們稱之爲「數據」),這可以通過公式和其他選項卡上的引用來引用。pandas:使用to_excel寫入現有的excel文件(xlsx)

我試着用兩種方法修改ExcelWriter,但都從openpyxl產生錯誤。

  1. 讀取現有的使用單張get_sheet_by_name(這個錯誤: 「NotImplementedError:使用 'iter_rows()',而不是」)
  2. 創建使用create_sheet新的工作表。 (這個錯誤: 「ReadOnlyWorkbookException:在一個只讀的工作簿無法創建新的工作表」)

    df=DataFrame() 
    from openpyxl.reader.excel import load_workbook 
    book = load_workbook('my_excel_file.xlsx', use_iterators=True) # Assume my_excel_file.xlsx contains a sheet called 'Data' 
    class temp_excel_writer(ExcelWriter): # I need this to inherit the other methods of ExcelWriter in io/parsers.py 
    def __init__(self, path, book): 
        self.book=book 
        test_sheet=self.book.create_sheet(title='Test') # This errors: ReadOnlyWorkbookException 
        self.use_xlsx = True 
        self.sheet_names=self.book.get_sheet_names() 
        self.actual_sheets=self.book.worksheets 
        self.sheets={} 
        for i,j in enumerate(self.sheet_names): 
         self.sheets[j] = (self.actual_sheets[i],1) 
        self.cur_sheet = None 
        self.path = save 
    my_temp_writer=temp_excel_writer('my_excel_file.xlsx', book) 
    df.to_excel(my_temp_writer, sheet_name='Data') 
    

有什麼想法?我錯過了明顯的東西嗎?我仍然在熊貓7.2

回答

2

當你與use_iterators=True加載工作簿,然後它的_set_optimized_read()對象Workbook,這導致其只讀裝上了。

因此,用下面的代碼:

from openpyxl.reader.excel import load_workbook 

book = load_workbook('t.xlsx', use_iterators=False) # Assume t.xlsx contains ['Data', 'Feuil2', 'Feuil3'] 
print book.get_sheet_names() 


class temp_excel_writer(): 
    def __init__(self, path, book): 
     self.book=book 
     test_sheet=self.book.create_sheet(title='Test') # No exception here now 
     self.book.save(path) 
     self.use_xlsx = True 
     self.sheet_names=self.book.get_sheet_names() 
     print self.sheet_names 
     self.actual_sheets=self.book.worksheets 
     self.sheets={} 
     for i,j in enumerate(self.sheet_names): 
      self.sheets[j] = (self.actual_sheets[i],1) 
     self.cur_sheet = None 
     self.path = path # I had to modify this line also 

my_temp_writer = temp_excel_writer('my_excel_file.xlsx', book) 

它創建一個名爲my_excel_file.xlsx文件和輸出如下:

['Data', 'Feuil2', 'Feuil3'] 
['Data', 'Feuil2', 'Feuil3', 'Test'] 

希望它可以幫助

相關問題