Openpyxl не может записать файл Excel более одного раза

#python #excel #openpyxl #xlsx #file-writing

#python #excel #openpyxl #xlsx #запись в файл

Вопрос:

Я пытаюсь записать в файлы Excel с помощью модуля openpyxl. По какой-то причине он позволяет мне писать только один раз. Если я попытаюсь написать еще раз, это вызовет:

 PermissionError: [Errno 13] Permission denied: 'expenses.xlsx'
 

Файл Excel и программа python находятся в одной папке на диске D. В чем проблема?

 from openpyxl import Workbook
from openpyxl import load_workbook
from datetime import datetime
import os

class ExpenseTracker:

    def __init__(self, file_name = "expenses.xlsx"):
        self.fname = file_name
        self.load_wb()

    def load_wb(self):
        """
        if the excel file doesn't exists it creates a new one
        with a sheet, and calls self.col_values() which
        adds values for first two columns in row 1
        """
        try:
            wb = load_workbook(self.fname)
        except Exception:
            wb = Workbook()
            wb.create_sheet("Expenses", 0)
            self.col_values()
            wb.save(self.fname)
        finally:
            self.wb = wb
            self.ws = self.wb["Expenses"]

    def col_values(self):
        # adds values for first two columns in row 1
        self.ws.cell(row = 1, column = 1).value = "Date"
        self.ws.cell(row = 1, column = 2).value = "Spent"

    def spend_income(self, amount):

        date = datetime.now()
        date_formatted = date.strftime("%d.%b %Y")

        last_row = self.ws.max_row   1
        last_col = self.ws.max_column   1

        self.ws.cell(row = last_row, column = 1).value = date_formatted
        self.ws.cell(row = last_row, column = 2).value = amount
        # writes under the last input in cols 1 and 2
        
        self.wb.save(self.fname)

wbook = ExpenseTracker()
wbook.spend_income(5)
 

Комментарии:

1. Вы пытались вызвать .close() после .save() ?

2. Я сделал это сейчас. Похоже, что вы не можете открыть этот файл непосредственно в Excel. Теперь работает. Спасибо

3. Excel блокирует открываемый файл, что означает, что вы не можете изменить его, пока он открыт в Excel.