2012-08-12 582 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'] 

希望它可以帮助

相关问题