#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.