# -&- coding: utf-8 -&-
"""
Created on Mon Jul? 8 22:05:32 2019
@author: same3
? ? ? ? 剛學(xué)習(xí)Python 不想給小伙伴們太多選擇黍瞧,如使用什么解釋器等等之類的莽鸿,因為對于初學(xué)者焦蘑,這些是迷迷糊糊的,沒有概念的冕末,太多的選擇萍歉,反而增加初學(xué)者的困惑,不如直接為大家選好档桃,如解釋器用Spyder枪孩。對于初學(xué)者,首先應(yīng)該多練習(xí),多敲代碼蔑舞,可以償試著修改代碼拒担,只要想到的,就去償試攻询,或許剛開始這會花費很多的時間从撼,但是越償試我們就會感覺到:越來越順心、順手钧栖、順大勢低零。正如跳槽和失敗,跳槽不是為了跳槽而跳槽拯杠,也許是因為找不到你為之努力和付出的人和事掏婶,或者是找到更能發(fā)揮自己優(yōu)勢的用武之地;而失敗潭陪,只要能從中得到啟發(fā)雄妥,自我反思和反省,并在今后的人生道路上先人一步識別失敗的苗頭依溯,避開陷人的坑坑老厌,這未償不是一件好事!在錯誤的方向上越努力黎炉,越堅持枝秤,就離成功越遠!
? ? ?? 好了慷嗜,言歸正傳宿百,今天讓我們來學(xué)習(xí):Python之For循環(huán),在Python調(diào)用VBA洪添,用Xlwings在Excel合并單元格垦页、設(shè)置字體
"""
#引入三個python 包
#pandas:數(shù)據(jù)分析包
import pandas as pd #"as"顧名思義,即以后可以在程序中以縮寫pd 代表 pandas
#numpy:科學(xué)計算包
import numpy? as np
#xlwings:python操作Excel的模塊干奢,最好的Excel操作包之一痊焊,有取代VBA的趨勢
#中文入門學(xué)習(xí)資料之一: https://www.cnblogs.com/catgatp/p/7875683.html
#英文官方學(xué)習(xí)網(wǎng)站https://docs.xlwings.org/en/stable/
import xlwings as xw
#Excel 文件路徑
file = r'D:\VBA\LEARNING_ERP.xlsm' #字符串前面加r,是表示其后的字符串不轉(zhuǎn)義忿峻,使用真實字符
#打開Excel工作簿薄啥,文件路徑:'D:\VBA\LEARNING_ERP.xlsm'
wb=xw.Book(file)
wb.app.display_alerts=False
#引用工作簿(workbook)里的工作表(worksheet)
sht_view=wb.sheets['view'] #存放計算后的數(shù)據(jù)
#九九乘法口決
'''
DataFrame的內(nèi)容由一個np.full([9,9]對象構(gòu)成,np.full([9,9], np.nan)即建立一個9*9的二維數(shù)組ndarray對象
該二維數(shù)組無素由nan構(gòu)成
index=np.arange(1,10,1),DataFrame的行索引由從1開始逛尚,到9結(jié)束垄惧,步長為1。
np.arange(1,10,1)包含下標(biāo)绰寞,不包含上標(biāo)即不含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 循環(huán)參考地址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)
###伙伴們有沒有看到到逊,三噪服、五條語句就做成了一個九九乘法表
##導(dǎo)出到Excel译仗,首先刪除A:AA列捏题,把格式也一起刪除缝裤,用cells.delete或clear無法刪除格式
sht_view.api.columns('A:AA').delete
#在Excel第50行第一列(即:A50)的擴展區(qū)域中顯示九九乘法表,其中.nan顯示為空
sht_view.range(50,1).expand().value=dfsz8? ?
print(dfsz8)
##.api.columns('A:AA').autofit自動調(diào)整列寬度铜靶,如果要指定列寬可用 sht_view.range((1,1),(1,20)).api.ColumnWidth = 8
sht_view.api.columns('A:AA').autofit
#設(shè)置標(biāo)題
sht_view.range(49,1).value='九九乘法表'
#設(shè)置標(biāo)題字體
sht_view.range('A49').api.Font.Size=18
#合并單元格
sht_view.range('A49:J49').api.Merge()
#xlwings 實現(xiàn)不了的功能可以調(diào)用VBA宏來實現(xiàn)
#運行宏
macro1 = wb.macro('宏1')? # this maps the VBA code
macro1()? # only this executes the VBA code
#在EXCEL中錄制的宏叔遂,主要設(shè)置合并單元格,設(shè)置字體格式争剿,代碼如下:
'''
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
'''
###效果圖