2019年9月14日 星期六

Python + Excel VBA 畫圖

前幾天在FB上看到有人說他去面試,結果被面試官嗆說履歷上精通Excel VBA,卻連一個函數都寫不出來,他老兄憤恨不平放了一張用Excel畫圖的皮卡丘,感覺有種事後想證明自己的能力的樣子,這裡簡單教大家如何用Excel VBA在Excel畫一張圖。
到網路上抓一張圖,本人抓一張「刀劍神域」中男女主角的圖來做,流程為透過Python取出圖片上每個點的RGB的數值,最後再由Excel VBA繪圖動作,請注意這不是匯入圖片的做法,而是由 Excel VBA 直接繪圖。
圖片出處

Python程式碼
from scipy.misc import imread
import pandas as  pd
 
tmp = []
img = imread("圖片路徑請自行設定")
for a in img:
    tmp0 = []
    for b in a:        
        tmp0.append("{:d}|{:d}|{:d}".format(b[0], b[1], b[2]))
    tmp.append(tmp0)
df = pd.DataFrame(tmp)
df.to_csv("123.csv", header=False, index=False) #圖片的RGB檔案路徑
df

Excel VBA程式碼
    
Sub draw()
    Dim row As Integer, col As Integer
    Dim tmp
    Workbooks(1).Sheets(1).Cells.Clear
    Workbooks(1).Sheets(1).Cells.ColumnWidth = 1
    With Workbooks.Open("C:\xxx\xxx\123.csv") '圖片的RGB檔案路徑
        With .ActiveSheet
                row = .Cells(65536, 1).End(xlUp).row
                col = .Cells(1, 1000).End(xlToLeft).Column
                Workbooks(1).Sheets(1).Cells(1, 1).Resize(row, col).Value = .Cells(1, 1).Resize(row, col).Value
        End With
        .Close
    End With
    
    For i = 1 To row
        For j = 1 To col
            tmp = Split(Sheets(1).Cells(i, j), "|")
            Sheets(1).Cells(i, j) = ""
            Sheets(1).Cells(i, j).Interior.Color = RGB(tmp(0), tmp(1), tmp(2))
        Next
    Next
End Sub
繪圖畫面


沒有留言:

張貼留言