web-dev-qa-db-ja.com

Pythonでwin32com.clientを使用してOutlookから添付ファイルを保存するにはどうすればよいですか?

Pythonのwin32comモジュールを使用して、電子メールを読み、自分のフォルダーに添付ファイルをダウンロードしようとすると、添付ファイルオブジェクトの取得を停止しました。

_from win32com.client import Dispatch
import datetime as date

Outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = Outlook.GetDefaultFolder("6")
all_inbox = inbox.Items
val_date = date.date.today()

sub_today = 'Hi'
att_today = 'Attachment.xlsx'
for msg in all_inbox:
    if msg.Subject == sub_today:
        break

for att in msg.Attachments:
    if att.FileName == att_today:
        break

att.SaveAsFile('new.xlsx')
att.ExtractFile('new.xlsx')
open(att)    
att.WriteToFile('x')
_

最後の4行はどれも機能しません...

_>>> att.ExtractFile('new.xlsx')
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.ExtractFile

>>> open(att) 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: coercing to Unicode: need string or buffer, instance found

>>> att.WriteToFile('x')
 raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.WriteToFile
_

att.SaveAsFile('new.xlsx')にエラーはありませんが、作業ディレクトリにそのようなファイルはありません。行が無視されたようです...

誰か助けてもらえますか?前もって感謝します!

10
lsheng

更新するために、SaveAsFileでdirとファイル名自体の両方を要求することでこの問題を解決しました。

att.SaveAsFile(os.getcwd() + '\\new.xlsx')

ここで見たほとんどのスレッドが、パスを挿入するだけでよいと言っているのとは異なります。実際には、パスとファイル名の両方が必要です。

また、奇妙なことに、ここにos.getcwd()を配置する必要があります。これは、Pythonが現在実行中のディレクトリを認識しないためです。Rでは、getwd()で作業ディレクトリを設定した後、次のことが可能になります。この場所にある任意のファイルに書き込みます。

乾杯、

10
lsheng

どこにいますかthink現在の作業ディレクトリはどこですか?間違ったフォルダを見ていると思いますが、SaveAsFileは一般的に問題なく動作します。

SaveAsFileにフルパスを渡すだけで、問題が解決するはずです。

2
Paul-Jan