python--Excel模块xlwings
安装:pip install xlwings 基本操作:xlwings的特⾊:
xlwings能够⾮常⽅便的读写Excel⽂件中的数据,并且能够进⾏单元格格式的修改可以和matplotlib以及pandas⽆缝连接
可以调⽤Excel⽂件中VBA写好的程序,也可以让VBA调⽤⽤Python写的程序。开源免费,⼀直在更新
【能读出公式计算的值】
新建⼯作簿:
import xlwings as xw
app = xw.App(visible=True,add_book=False) #创建应⽤
#visible=True 显⽰Excel⼯作簿;False 不显⽰⼯作簿
#add_book=False 不再新建⼀个⼯作簿;True 另外再新建⼀个⼯作簿
wb = app.books.add() #新建⼯作簿sh1=xw.books.active #引⽤活动⼯作薄wb.activate() #激活为当前⼯作簿
打开已有⼯作簿:
⽅式⼀:
import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\\sample.xlsx') #读⼊已有⼯作簿⽅式⼆:
import xlwings as xw
wb = xw.Book('D:\\sample.xlsx') #读⼊已有⼯作簿
#⼯作簿不显⽰
保存⼯作簿:
import xlwings as xw
wb = xw.Book('D:\\sample.xlsx')
wb.save('D:\\samplelm.xlsx') #保存⼯作簿参数可以省略:⼯作簿的原路径或脚本所在的路径
退出和关闭:
import xlwings as xw
app = xw.App(visible=True,add_book=False)wb = app.books.open('D:\\sample.xlsx')
wb.close() #关闭⼯作簿(程序不能编辑了)----显⽰的⽂件不关闭app.quit() #退出应⽤---显⽰的⽂件也关闭
⼯作表操作:
import xlwings as xw
app = xw.App(visible=True,add_book=False)wb = app.books.open('D:\\sample.xlsx')
sht = wb.sheets[0] #引⽤⼯作表
#参数:⼯作表序号
sht1 = wb.sheets['物理'] #引⽤⼯作表
#参数:⼯作表名称
sht=xw.sheets.active #引⽤活动sheet
print(sht)print(sht1)wb.close() app.quit()
sht.clear() # 清除sheet的内容和格式a=sht.name #返回表格名称
sht.delete # 删除sheet----[没有删除啊 ]
单元格操作:
import xlwings as xw
app = xw.App(visible=True,add_book=False)wb = app.books.open('D:\\sample.xlsx')sht = wb.sheets[0]
rng = sht.range('a1') #引⽤单元格---⽅式⼀
##参数:可以⼤写,可以⼩写rng = sht['b1'] #引⽤单元格---⽅式⼆
rng = sht[0,0] #引⽤单元格---⽅式三--第⼀⾏的第⼀列即a1rng=xw.Range('c1') #引⽤活动sheet上的单元格
#注意Range⾸字母⼤写print(rng)wb.close()app.quit()
rng = sht.range('a1:a5') #引⽤区域---⽅式⼀
#rng = sht['a1:b5'] #引⽤区域---⽅式⼆
##rng = sht[:5,0] #引⽤区域---⽅式三---rng = sht.range('a1')rng.value=10 #单元格赋值
rng = sht.range('b1')
rng.value='abcd' #单元格赋值
sht.range('c1').value = [1,2,3,4] #按⾏插⼊
#从单元格c1开始,按⾏依次插⼊数据
sht.range('a1:d4').value = [10,20,30,40] #指定区域插⼊数据---按⾏sht.range('a2').options(transpose=True).value = [5, 6, 7, 8] #按列插⼊
#从单元格a2开始,按列依次插⼊数据
#既然默认的是按⾏写⼊,我们就把它倒过来嘛(transpose),单词要打对,如果你打错单词,它不会报错,⽽会按默认的⾏来写⼊
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']] #区域赋值
#从单元格a6开始赋值
#['a','b','c'] 是⼀⾏;['d','e','f']是⼀⾏
L=sht.range('a1:d4').value #读取A1:D4区域的值
原表格数据:
返回值:
返回值是列表,每⼀⾏是⼀个列表
返回的数值默认是浮点数
rng=sht['d2']
a=rng.value #返回指定单元格的值
rng = sht.range('a1')
rng.add_hyperlink(r'www.baidu.com','百度','提⽰:点击即链接到百度') # 指定单元格加⼊超链接a=rng.hyperlink #获得range的超链接
#http://www.baidu.com/
rng = sht.range('b6')
rng.formula='=SUM(B1:B5)' #输⼊公式a=rng.formula #获取公式
#=SUM(B1:B5)
a=rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False) # 获得单元格的绝对地址
# $B$6
其它操作:
a=wb.fullname #返回⼯作簿的绝对路径
#D:\\sample.xlsx
a=wb.name #返回⼯作簿的名称
#sample.xlsx
sht.activate() # 激活sheet为活动⼯作表
sht = wb.sheets[0]rng = sht.range('a1')
a=rng.address #取得当前range的地址--$A$1
rng = sht.range('a1:c1')
a=rng.address #取得当前range的地址--$A$1:$C$1a=rng.get_address() #与rng.address相同rng.clear_contents() # 清除range的内容rng.clear() # 清除格式和内容
sht = wb.sheets[0]rng = sht.range('a1')
rng.color=(255,0,0) # 设置range的背景颜⾊
rng = sht.range('b1')rng.color=(0,0,255)
a = rng.color # 取得range的背景⾊,以元组形式返回RGB值
#(255, 0, 0)
rng.color=None # 清除range的背景⾊
sht = wb.sheets[0]rng = sht.range('c2:g4')
a=rng.column #获得range的第⼀列列标
#从A列是1
a=rng.count #返回range中单元格的格数
a=rng.row # 返回range的第⼀⾏⾏标
rng = sht.range('b2:g4')
a=rng.last_cell #获得range中右下⾓最后⼀个单元格
#rng = sht.range('b6:c1')
a=rng.width # 返回range的总宽度
rng = sht.range('b6')
a=rng.column_width # 获得列宽
sht = wb.sheets[0]rng = sht.range('b2:g4')
a=rng.row_height # ⾏的⾼度,所有⾏⼀样⾼返回⾏⾼,不⼀样返回Nonea=rng.height # 返回range的总⾼度
a=rng.shape # 返回range的⾏数和列数---(3, 6)a=rng.sheet # 返回range所在的sheet
#a=rng.rows #返回range的所有⾏
for i in a: print(i)
# # #a=rng.rows[0] # range的第⼀⾏
#a=rng.rows.count # range的总⾏数a=rng.columns # 返回range的所有列
for i in a: print(i)
# # # # #rng = sht.range('b2:g4')
a=rng.columns[0] # 返回range的第⼀列
#a=rng.columns.count # 返回range的列数rng.autofit() # 所有range的⼤⼩⾃适应rng.columns.autofit() # 所有列宽度⾃适应rng.rows.autofit() # 所有⾏⾼⾃适应