@ShmyaksMaks

Python, openpyxl, не сохраняет файл, как решить проблему?

Здравствуйте, я школьник-самоучка на python, пытался создать программу которая задавала вопросы по деньгам и вписывала их в таблицу. Вроде вышло там где используеться xlsxwriter (когда создаем новый файл), а вот когда нужно открыть сущевствующий, и вписать данные, то openpyxl почему-то не сохраняет. Ошибок не выдает. Может я что-то не заметил? Я думаю что он не сохраняет, потому что сущевствующий файл просто не изменяеться. Прошу помочь, код ниже.
P.S.: Не судите строго, я учу python не более недели, а если нашли граматические ошибки в тексте ранее прошу извинения, я из Украины, у меня в школе русский не учат.

import openpyxl
import xlsxwriter
import os
import datetime
from openpyxl import Workbook


work=str(os.getcwd())
print('Directory is ' + work)
tday=datetime.datetime.today()
workbook = xlsxwriter.Workbook('YourMoney.xlsx')


ourfile=input('Create new or open? (New, open) ')

    
if ourfile=="New" or ourfile=="N" or ourfile=="new" or ourfile=="n":
    
    ws1 = worksheet = workbook.add_worksheet()
    a=0
    b='A' + str(a+1)
    c='B' + str(a+1)
    d='C' + str(a+1)
    e='D' + str(a+1)
    format7 = workbook.add_format({'num_format': 'mm dd yyyy'})
    ws1.write(b, tday, format7)
    spend=input('Did you spend or earn? (Spend, earn) ')
    if spend=='spend' or spend=='Spend' or spend=='S' or spend=='s':
        howmany=input('How many? With currency ')
        ws1.write(c, "-" + howmany)
        kuda=input('Where did you spend your money?')
        ws1.write(d, kuda)
        workbook.close()
        exit()
    if spend=='Earn' or spend=='earn' or spend=='E' or spend=='e':
        howmany=input('How many? With currency ')
        ws1.write(c, "+" + howmany)
        kuda=input('Where did you spend your money?')
        ws1.write(d, kuda)
        workbook.close()
    else:
        print("ERROR, can't recognize command")
        



    

elif ourfile=="Open" or ourfile=="open" or ourfile=="O" or ourfile=="o":
    wb = Workbook()
    ws=wb.active

    print(os.listdir)
    open=input("Which file open? (WITHOUT .xlsx) ")
    a=0
    b='A' + str(a+1)
    c='B' + str(a+1)
    d='C' + str(a+1)
    e='D' + str(a+1)
    wb = openpyxl.load_workbook(open + '.xlsx')
    while True:
        if 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 or 0 in ws['A' + str(a)]:
            break
        else:
            a=a+1
    
    spend=input('Did you spend or earn? (Spend, earn) ')
    if spend=='spend' or spend=='Spend' or spend=='S' or spend=='s':
        howmany=input('How many? With currency ')
        ws1.write(c, "-" + howmany)
        kuda=input('Where did you spend your money?')
        ws[d] = kuda
        wb.save(open + '.xlsx')
    if spend=='Earn' or spend=='earn' or spend=='E' or spend=='e':
        howmany=input('How many? With currency ')
        ws[c] = "+" + howmany
        kuda=input('Where did you spend your money?')
        ws[d] = kuda
        wb.save(open + '.xlsx')
    else:
        print("ERROR, can't recognize command")
    
else:
    print("ERROR, can't recognize command")
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@Alons
Попробуйте использовать для доступа к ячейки при записи из документации:
There is also the Worksheet.cell() method.

This provides access to cells using row and column notation:

> > > > > > > > > d = ws.cell(row= 4, column= 2, value= 10)


От себя еще:
value = col # col - то значение которое вы хотите поместить в ячейку
cell = sheet.cell(row=row_index, column=col_index) #row_index и col_index соответственно номер строки и номер колонки(координаты нахождения ячейки)
cell.value = value
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Danya_Violet
@Danya_Violet
Системный администратор
def xlsx(message):
    time.sleep(3)

    date = datetime.now()
    quantity = message
    doc = openpyxl.load_workbook(filename='table.xlsx')
    sheet = doc['test']

    rows = (
        (date, quantity),
    )

    for row in rows:
        sheet.append(row)
    doc.save('table.xlsx')


нашёл в старом проекте, проверил - всё работает, записывается каждый вызов функции, при условии, что файл table.xlsx закрыт в момент вызова функции.

5e89b29b1252b455487510.jpeg
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы