# -&- coding: utf-8 -&-
"""
Created on Mon Jul? 8 22:05:32 2019
@author: same3
? ? ? ? 剛學習Python 不想給小伙伴們太多選擇,如使用什么解釋器等等之類的,因為對于初學者,這些是迷迷糊糊的,沒有概念的,太多的選擇,反而增加初學者的困惑,不如直接為大家選好,如解釋器用Spyder。對于初學者,首先應該多練習,多敲代碼,可以償試著修改代碼,只要想到的,就去償試,或許剛開始這會花費很多的時間,但是越償試我們就會感覺到:越來越順心、順手、順大勢。正如跳槽和失敗,跳槽不是為了跳槽而跳槽,也許是因為找不到你為之努力和付出的人和事,或者是找到更能發揮自己優勢的用武之地;而失敗,只要能從中得到啟發,自我反思和反省,并在今后的人生道路上先人一步識別失敗的苗頭,避開陷人的坑坑,這未償不是一件好事!在錯誤的方向上越努力,越堅持,就離成功越遠!
? ? ?? 好了,言歸正傳,今天讓我們來學習:Python之For循環,在Python調用VBA,用Xlwings在Excel合并單元格、設置字體
"""
#引入三個python 包
#pandas:數據分析包
import pandas as pd #"as"顧名思義,即以后可以在程序中以縮寫pd 代表 pandas
#numpy:科學計算包
import numpy? as np
#xlwings:python操作Excel的模塊,最好的Excel操作包之一,有取代VBA的趨勢
#中文入門學習資料之一: https://www.cnblogs.com/catgatp/p/7875683.html
#英文官方學習網站https://docs.xlwings.org/en/stable/
import xlwings as xw
#Excel 文件路徑
file = r'D:\VBA\LEARNING_ERP.xlsm' #字符串前面加r,是表示其后的字符串不轉義,使用真實字符
#打開Excel工作簿,文件路徑:'D:\VBA\LEARNING_ERP.xlsm'
wb=xw.Book(file)
wb.app.display_alerts=False
#引用工作簿(workbook)里的工作表(worksheet)
sht_view=wb.sheets['view'] #存放計算后的數據
#九九乘法口決
'''
DataFrame的內容由一個np.full([9,9]對象構成,np.full([9,9], np.nan)即建立一個9*9的二維數組ndarray對象
該二維數組無素由nan構成
index=np.arange(1,10,1),DataFrame的行索引由從1開始,到9結束,步長為1。
np.arange(1,10,1)包含下標,不包含上標即不含10
'''
#Numpy 參考地址https://www.cnblogs.com/blogwangwang/p/9608141.html
dfsz8=pd.DataFrame(np.full([9,9], np.nan),index=np.arange(1,10,1),columns=np.arange(1,10,1))
#for 循環參考地址https://www.runoob.com/python/python-for-loop.html
for i in np.arange(1,10,1):
? ? for j in np.arange(i,10,1):
? ? ? ? dfsz8.iloc[j-1,i-1]=str(i)+'x'+str(j)+'='+str(i*j)
###伙伴們有沒有看到,三、五條語句就做成了一個九九乘法表
##導出到Excel,首先刪除A:AA列,把格式也一起刪除,用cells.delete或clear無法刪除格式
sht_view.api.columns('A:AA').delete
#在Excel第50行第一列(即:A50)的擴展區域中顯示九九乘法表,其中.nan顯示為空
sht_view.range(50,1).expand().value=dfsz8? ?
print(dfsz8)
##.api.columns('A:AA').autofit自動調整列寬度,如果要指定列寬可用 sht_view.range((1,1),(1,20)).api.ColumnWidth = 8
sht_view.api.columns('A:AA').autofit
#設置標題
sht_view.range(49,1).value='九九乘法表'
#設置標題字體
sht_view.range('A49').api.Font.Size=18
#合并單元格
sht_view.range('A49:J49').api.Merge()
#xlwings 實現不了的功能可以調用VBA宏來實現
#運行宏
macro1 = wb.macro('宏1')? # this maps the VBA code
macro1()? # only this executes the VBA code
#在EXCEL中錄制的宏,主要設置合并單元格,設置字體格式,代碼如下:
'''
Sub 宏1()
? ? Range("A49").Select
? ? With Selection.Font
? ? ? ? .Name = "Arial"
? ? ? ? .Size = 18
? ? ? ? .Strikethrough = False
? ? ? ? .Superscript = False
? ? ? ? .Subscript = False
? ? ? ? .OutlineFont = False
? ? ? ? .Shadow = False
? ? ? ? .Underline = xlUnderlineStyleNone
? ? ? ? .ColorIndex = xlAutomatic
? ? ? ? .TintAndShade = 0
? ? ? ? .ThemeFont = xlThemeFontNone
? ? End With
? ? Range("A49:J49").Select
? ? With Selection
? ? ? ? .HorizontalAlignment = xlCenter
? ? ? ? .VerticalAlignment = xlBottom
? ? ? ? .WrapText = False
? ? ? ? .Orientation = 0
? ? ? ? .AddIndent = False
? ? ? ? .IndentLevel = 0
? ? ? ? .ShrinkToFit = False
? ? ? ? .ReadingOrder = xlContext
? ? ? ? .MergeCells = False
? ? End With
? ? Selection.Merge
End Sub
'''
###效果圖