2016-12-17 39 views
1

を保存するには、範囲エラーのうち、リストインデックス:はIndexErrorが発生しremove_sheetopenpyxl:私はopenpyxl使用しようとしていますシート

  1. オープン3つのワークシート(シート1、シート2、シート3)を含むExcel(2016)ワークブック
  2. 異なるワークブックマイナスのSheet2

    from openpyxl import load_workbook 
    wb = load_workbook("c:/Users/me/book1.xlsx") 
    ws = wb.get_sheet_by_name('Sheet2') 
    wb.remove_sheet(ws) 
    wb.save("c:/Users/me/book2.xlsx")
にブックを保存したワークシート(シート2)
  • を削除します

    wb.saveは、IndexError: list index out of rangeエラーを生成し、Excelが開くことができない破損したbook2.xlsxファイルを生成します。

  • +0

    バグがあると思われる場合は、バグレポートを提出してください。 –

    +0

    openpyxlの新機能私はバグレポートを提出して嬉しいですが、自分のコードがopenpyxlの有効な使用方法であることを確認したかっただけです。 – jim99

    +0

    コードは大丈夫ですが、del wb ['Sheet2'] 'は簡単な方法です。ファイルを提供する必要があります。 –

    答えて

    1

    私は同様の問題に遭遇し、xlwtライブラリのみで実行されます。それにかかわらず、原因は同じです。アクティブシートとして設定されているシートを取り除きます。したがって、これを修正するには、ワークブックを保存する前に、他のシートをアクティブとして設定します。 openpyxlで、それはこのようなものになるだろう:

    from openpyxl import load_workbook 
    wb = load_workbook("c:/Users/me/book1.xlsx") 
    ws = wb.get_sheet_by_name('Sheet2') 
    wb.remove_sheet(ws) 
    wb._active_sheet_index = 0 
    wb.save("c:/Users/me/book2.xlsx") 
    

    私は、これは非常に良いプログラミングの練習ではなく、一つだけを取得するには、アクティブなシートを設定する方法がないことを言及しなければなりません。

    編集:ちょうどこのレポがbitbucketに移動し、アクティブシートを設定する方法があることが判明しました。ただ使ってください:

    wb.active = 0 
    
    +0

    ありがとう!良い回避策 – jim99

    関連する問題