невозможно записать в файл Excel с помощью следующей строки xlsxwriter - PullRequest
1 голос
/ 16 октября 2019

Я хочу сохранить все числа в теме в следующем ряду, но сохранить только 1 строку. «число» все еще отображается при их печати, но в файле Excel (1.xlsx) сохраняется только первое число в A1

def read_email_from_gmail():
        workbook = xlsxwriter.Workbook('1.xlsx') 
        worksheet = workbook.add_worksheet() 
        column = 0
        row = 0
        mail = imaplib.IMAP4_SSL('imap.yandex.com')
        mail.login('myemail','password')
        mail.select('inbox')

        result, data = mail.search(None, 'SUBJECT "New"')
        mail_ids = data[0]

        id_list = mail_ids.split()   
        first_email_id = int(id_list[0])
        latest_email_id = int(id_list[-1])

        for i in range(latest_email_id,first_email_id, -1):
            # need str(i)
            result, data = mail.fetch(str(i), '(RFC822)' )
            for response_part in data:
                if isinstance(response_part, tuple):
                    # from_bytes, not from_string
                    msg = email.message_from_bytes(response_part[1])
                    email_subject = msg['subject']
                    if (email_subject.find('#') != -1): 
                        number = email_subject.split("#")[1]
                        worksheet.write(row, column, number)
                        row += 1
                        workbook.close()
                    else: 
                        print ("no have Number") 
                    email_from = msg['from']
                    print ('From : ' + email_from + '\n')
                    print ('Subject : ' + email_subject + '\n')
                    print ('Number : ' + number + '\n')


# nothing to print here
read_email_from_gmail()

1 Ответ

0 голосов
/ 16 октября 2019

Программа закрывает файл xlsx сразу после записи в него:

                    if (email_subject.find('#') != -1): 
                        number = email_subject.split("#")[1]
                        worksheet.write(row, column, number)
                        row += 1
                        workbook.close()

Вы должны переместить close() из циклов на тот же уровень, на котором вы создали файл с xlsxwriter.Workbook().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...