2020年3月27日 星期五

Oracle EBS: WebADI無法正常執行

狀況: 同一個用來處理WebADI的excel檔案, 有人無法正常執行

原因: Excel的設定問題

解法:

Excel選項
  -> 信用中心
    -> 巨集設定

設定以下兩項:
  啟用所有巨集
  信任存取VBA專案物件模型


2020年3月20日 星期五

Python: 以 Python使用Outlook發出帶有附件的email

看起來是個常見問題, 很快就找到sample:

import win32com.client as win32
outlook
= win32.Dispatch('outlook.application')
mail
= outlook.CreateItem(0)
mail
.To = 'To address'
mail
.Subject = 'Message subject'
mail
.Body = 'Message body'
mail
.HTMLBody = '<h2>HTML Message body</h2>' #this field is optional
# To attach a file to the email (optional):
attachment 
= "Path to the attachment"
mail
.Attachments.Add(attachment)

mail
.Send()


但一開始找不到win32com , 有訊息:

  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  ModuleNotFoundError: No module named 'win32com'


直接執行 pip install win32com , 出現error:

  ERROR: Could not find a version that satisfies the requirement win32com (from versions: none)
  ERROR: No matching distribution found for win32com


實際上應該執行 pip install pypiwin32 .

測試OK.


Ref:
1.Send Outlook Email Via Python?
https://stackoverflow.com/questions/6332577/send-outlook-email-via-python

2.Python操作Word(Win32com)
https://zhuanlan.zhihu.com/p/67543981

2020年3月13日 星期五

Powershell: 寄送email並夾帶附件

語法單純(與Python相比):

Send-MailMessage -From $From -to $To -Cc $Cc -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl -Credential (Get-Credential) -Attachments $Attachment –DeliveryNotificationOption OnSuccess

如果要寄給多個人, 以逗號分隔, 例如:

  $To = "email_1","email_2"

要帶多個附件也是以逗號分隔.


Ref:
1.How to Send an Email Using Windows PowerShell
https://www.makeuseof.com/tag/send-email-windows-powershell/

2.Send-MailMessage
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/send-mailmessage?view=powershell-7

3.Powershell 學習筆記
https://blog.darkthread.net/blog/powershell-learning-notes/

4.PowerShell® Notes for Professionals book
https://books.goalkicker.com/PowerShellBook/

5.python中傳送郵件(普通文字檔案、附件、圖片等)
https://www.itread01.com/content/1544639973.html

2020年3月9日 星期一

Python: 執行外部程式

依現有需求, 用最簡單的方式就可以了:
>>> imoprt os
>>> os.system('notepad')
>>> os.system('notepad python.txt')


目前看到有四種方式:
1.使用os.system函式執行其他程式
2.使用ShellExecute函式執行其他程式
3.使用CreateProcess函式執行其他程式
4.使用ctypes呼叫kernel32.dll中的函式


Ref:
1.Python呼叫(執行)外部程式
https://www.itread01.com/content/1543855085.html

2020年3月4日 星期三

Python: 在Python中進行ftp

原先以為會和一般ftp作業一樣, 有相同的put、get指令, 結果是要實作比較細節的檔案讀寫, 還好有不少範例可以參考.

import ftplib

host='ip address'
username=?
password =?

file_remote = 'zz.txt'
f= ftplib.FTP(host)
f.login(username,password)

file_local = 'c:\\temp\\T1.txt'
fp=open(file_local,'wb')
f.retrbinary('RETR %s'%file_remote, fp.write, 1024)

fp.close()
f.quit()


Ref:
1.python之FTP上传和下载
https://www.cnblogs.com/gongxr/p/7529949.html

2.FTP client in Python
https://pythonspot.com/ftp-client-in-python/

2020年3月3日 星期二

Python: 使用cx_Oracle擷取Oracle DB資料

以Python使用cx_Oracle擷取Oracle DB資料.

找了參考資料, 安裝cx_Oracle後, 不管怎麼測試, 都出現同樣問題:

  DPI-1072: the Oracle Client library version is unsupported

原先就有安裝Developer 10g和instantclient 10.2, 可能真的太舊, 再安裝instantclient 19.5, 還是同樣狀況. 結果是path的設定造成, 因為python可能先找到較舊的版本, 所以要把19.5的路徑放在最前面.

第1關過了, 再來第2個問題:

  無法找到程序輸入點GetOverlappedResultEx(在動態連結程式庫KERNEL32.dll)



這有點麻煩, 看了多篇文章才找到原因: Windows 7不支援...

找台Windows 10試試, 果然正常, 有Windows版本問題真的傷腦筋, 要特別注意.

擷取資料沒問題, 其他的就單純了.


Ref:
1.How to Connect Python to Oracle Database using cx_Oracle
https://datatofish.com/how-to-connect-python-to-an-oracle-database-using-cx_oracle/

2.Python Test API - 用python連線Oracle資料庫並操作
https://www.itread01.com/content/1542186427.html

3."DPI-1072: the Oracle Client library version is unsupported" with python3.7.2 and instantclient_19_3/instantclient_12_2 on win10
https://github.com/oracle/python-cx_Oracle/issues/384

4.GetOverlappedResultEx could not be located in kernel32.dll
https://stackoverflow.com/questions/33922025/getoverlappedresultex-could-not-be-located-in-kernel32-dll

5.结合使用 Oracle Database 11g 和 Python
https://www.oracle.com/technetwork/cn/tutorials/229069-zhs.htm#app