最近看到python有xlwings這lib,好像可以和VBA連結,但還沒研究很透徹,對我來說好處是執行時excel不用關閉,而且指令很直覺。
*可用coordinate_from_string & column_index_from_string將excel座標轉成數字
raw data format:
因為不喜歡畫面上太多迴圈去讀值, 做法是先個別抓出value, x, y座標的list, 再zip成類似子陣列, 讀值概念如下:
val = xw.Range('A2').vertical.value Xaxis = xw.Range('B2').vertical.value Yaxis = xw.Range('C2').vertical.value zipVal_list = list(zip(val, Xaxis, Yaxis)) for zipVal in zipVal_list: print(zipVal)
全程式碼:
from openpyxl.utils import _get_column_letter from openpyxl.utils import coordinate_from_string, column_index_from_string import xlwings as xw xw.Workbook(r'C:\xlwings.xlsx') val = xw.Range('A2').vertical.value Xaxis = xw.Range('B2').vertical.value Yaxis = xw.Range('C2').vertical.value zipVal_list = list(zip(val, Xaxis, Yaxis)) for zipVal in zipVal_list: #start point zero = coordinate_from_string('G4') # G4 as start point zero_x = column_index_from_string(zero[0])-1 zero_y = zero[1]-1 #_get_column_letter converts int to letter only but not in float axis = str(_get_column_letter(int(zipVal[1]) + zero_x) + str(int(zipVal[2]) + zero_y)) xw.Range(axis).value = zipVal[0]
map result: (可隨raw data的x,y設定轉成任何圖形,ex:圓形分布)
沒有留言:
張貼留言