5

df.to_excel()私は苦労しているそのための簡単なユースケースを持っています。既存のXLSXワークブックの特定のワークシートタブ(「データ」と呼びましょう)に書き込みたいのですが、これは他のタブの数式やピボットで参照できます。

2つの方法で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にいます

4

1 に答える 1

3

ワークブックを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']

それが役に立てば幸い

于 2012-08-23T11:44:36.683 に答える