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') #引用单元格---方式一 #<Range [sample.xlsx]Sheet!$A$1> #参数:可以大写,可以小写 rng = sht['b1'] #引用单元格---方式二 rng = sht[0,0] #引用单元格---方式三--第一行的第一列即a1 rng=xw.Range('c1') #引用活动sheet上的单元格 #注意Range首字母大写 print(rng) wb.close() app.quit()
rng = sht.range('a1:a5') #引用区域---方式一 #<Range [sample.xlsx]Sheet!$A$1:$A$5> rng = sht['a1:b5'] #引用区域---方式二 #<Range [sample.xlsx]Sheet!$A$1:$B$5> #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$1 a=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中右下角最后一个单元格 #<Range [sample.xlsx]Sheet!$G$4>
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 # 行的高度,所有行一样高返回行高,不一样返回None a=rng.height # 返回range的总高度 a=rng.shape # 返回range的行数和列数---(3, 6) a=rng.sheet # 返回range所在的sheet #<Sheet [sample.xlsx]Sheet> a=rng.rows #返回range的所有行 for i in a: print(i) #<Range [sample.xlsx]Sheet!$B$2:$G$2> #<Range [sample.xlsx]Sheet!$B$3:$G$3> #<Range [sample.xlsx]Sheet!$B$4:$G$4> a=rng.rows[0] # range的第一行 #<Range [sample.xlsx]Sheet!$B$2:$G$2> a=rng.rows.count # range的总行数 a=rng.columns # 返回range的所有列 for i in a: print(i) #<Range [sample.xlsx]Sheet!$C$2:$C$4> #<Range [sample.xlsx]Sheet!$D$2:$D$4> #<Range [sample.xlsx]Sheet!$E$2:$E$4> #<Range [sample.xlsx]Sheet!$F$2:$F$4> #<Range [sample.xlsx]Sheet!$G$2:$G$4>
rng = sht.range('b2:g4') a=rng.columns[0] # 返回range的第一列 #<Range [sample.xlsx]Sheet!$B$2:$B$4> a=rng.columns.count # 返回range的列数 rng.autofit() # 所有range的大小自适应 rng.columns.autofit() # 所有列宽度自适应 rng.rows.autofit() # 所有行高自适应