Python 與 Excel 的串接與整合

講者:琪雅

時間:2020/4/12

Outline

  • 介紹 VBA
  • 介紹 xlwings
  • lab

VBA(全名為Visual Basic for Applications)

設計Office 應用程式中的自訂功能

使用者能夠客製化出符合你個人需求的巨集或是函數

其實已經有許多讓 Python 串接 Excel 的套件,這些套件能讓我們透過 Python 作出類似 VBA 巨集的功能。

VBA(全名為Visual Basic for Applications)

設計Office 應用程式中的自訂功能

使用者能夠客製化出符合你個人需求的巨集或是函數

其實已經有許多讓 Python 串接 Excel 的套件,這些套件能讓我們透過 Python 作出類似 VBA 巨集的功能。

安裝  xlwings

pip install xlwings

用 Python 與 xlwings 寫一個簡單的 Hello World 程式

import xlwings as xw
  • 匯入 xlwings 套件
  • 開啟一個新的 Excel 檔案,並將檔案存入 workbook 變數
workbook = xw.Book()

不要關掉 Excel, 直接執行這支程式

# 到 workbook 代表的 excel 檔案下,開啓名爲 '工作表1' 的試算表
sheet = workbook.sheets['工作表1']
# 將該試算表裏面的 A1 儲存格的值設定成 "Hello World!"
sheet.cells(1, "A").value = "Hello World!"

for Windows

for Mac

sheet = workbook.sheets['工作表1']
sheet.cells(1, 1).value = "Hello World!"

Lab

import xlwings as xw

wb = xw.Book(r'stock_price_data.xlsx')
tsmc_sheet = wb.sheets['2330']

算出所有的報酬率

  • 每日報酬率 = (昨日收盤價 - 今日收盤價) / 昨日收盤價
  • 用for 迴圈
for i in range(3, 16):
    # 到 B 欄截取今日收盤價
    price_today = tsmc_sheet.cells(i, "B").value
    # 到 B 欄截取迭代到的上一個 row, 也就是昨日收盤價
    price_yesterday = tsmc_sheet.cells(i-1, "B").value
    # 算出該筆資料的日報酬率了
    daily_return = (price_today-price_yesterday) / price_yesterday
    # 最後再將算出的日報酬率寫入同一列,欄為 C 的儲存格
    tsmc_sheet.cells(i, "C").value = daily_return

mac 記得把B、C 改成2、3喔!

顔色標記漲跌

  • 用for 迴圈 和 if 迴圈
  • 紅色是(255, 0, 0),綠色是(0, 255, 0)
for i in range(3, 16):
    daily_return = tsmc_sheet.cells(i, 'C').value
    # 若該筆資料的日報酬率是上漲的 (大於 0)
    if daily_return > 0:
        # 就把該儲存格的底色換成紅色
        # (255, 0, 0) 三個數字是代表 RGB, 也就是紅、綠、藍三種顔色的强度
        tsmc_sheet.cells(i, 'C').color = (255, 0, 0)
    # 若該筆資料的日報酬率是下跌的 (小於 0)
    elif daily_return < 0:
        # 就把該儲存格的底色換成綠色
        tsmc_sheet.cells(i, 'C').color = (0, 255 , 0)

mac 記得把B、C 改成2、3喔!

Thank you for listening.

References

Python with Excel

By q8745912

Python with Excel

  • 178