75153


下記のxlsxのデータを読み込みメールで送信したいですが、  
AttributeErrorのエラーが表示されます。  
以下のエラーはどう直せばよいのでしょうか。

xlsxのデータ

[code]

     A       B     C         
    アメリカ  1234個  66.7%　 
    カナダ　 1234個　4.9%
    
[/code]

エラー

[code]

    ['アメリカ 1234 66.7%']
    ['カナダ' 1234 4.9%']
    
    Traceback (most recent call last):
      File "c:/Users/test/Documents/test/test.py", line 28, in <module>
        message = '\n'.join([f"{column}\n{data}\n" for column,data in row.iloc[values].iteritems()]) #error !
    AttributeError: 'tuple' object has no attribute 'iloc'
    
[/code]

code

[code]

    import openpyxl
    from openpyxl.utils import column_index_from_string
    from smtplib import SMTP
    from email.mime.text import MIMEText
    from email import encoders
    from email.mime.base import MIMEBase
    from email.mime.multipart import MIMEMultipart
    import smtplib
    import codecs
    import pandas as pd
    
    wb = openpyxl.load_workbook('text.xlsx',data_only=True)
    ws = wb.worksheets[0]
    
    for row in ws["A1:C2"]:
        values = []
        for col in row:
            values.append(col.value)
            print(values)
    
    account = "1223"
    password = "1223"
    
    to_email = "1223"
    from_email = "1223"
    
    subject = "Test"
    message = '\n'.join([f"{column}\n{data}\n" for column,data in row.iloc[values].iteritems()]) #error !
    #'\n'.join(values)
    print(message)
    msg = MIMEMultipart()
    msg["Subject"] = subject
    msg["To"] = to_email
    msg["From"] = from_email
    
    # メール本文
    message = MIMEText(message)
    msg.attach(message)
    
    # 添付ファイルの設定
    attach_file = {'name': 'test.jpeg', 'path': 'C:\\Users\\test\\Desktop\\test.jpeg'} # nameは添付ファイル名。pathは添付ファイルの位置を指定
    attachment = MIMEBase('image', 'jpeg')
    file = open(attach_file['path'], 'rb+')
    attachment.set_payload(file.read())
    file.close()
    encoders.encode_base64(attachment)
    attachment.add_header("Content-Disposition", "attachment", filename=attach_file['name'])
    msg.attach(attachment)
    
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login(account, password)
    server.send_message(msg)
    server.quit()
               
    
[/code]

28行目のmessageを下記に直すとエラーなしで行きますが、  
出力結果` カナダ 1234 4.9%` １行しか取得できないです。

[code]

    #'\n'.join(values)
    
[/code]

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。


CC BY-SA 4.0
2021-04-07T13:09:10.517
75152
2021-04-07T14:04:48.193
18859
question
python excel
メールで送信する際にAttributeErrorエラー


エラーメッセージにある通り、

> AttributeError: 'tuple' object has no attribute 'iloc'

`tuple` は `pandas.DataFrame` や `pandas.Series` とは異なる型ですので `iloc`
メソッドを持っていません。記載されているソースコードを見ますと、以下の様にすれば同じ結果になるかと思われます。

[code]

    message = ''
    for row in ws["A1:C2"]:
      for col in row:
        if col.column_letter == 'C' and col.data_type == 'n':
          col.value = f'{col.value*100:.1f}%'
        message += f'{col.column_letter}\n{col.value}\n'
      message += '\n'
    
    print(message)
    
[/code]


CC BY-SA 4.0
2021-04-07T14:04:48.193
75153
2021-04-07T14:04:48.193
75152
answer