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()   # 所有行高自适应

 

 

 

 

posted @ 2019-10-10 15:05  天子骄龙  阅读(6499)  评论(0编辑  收藏  举报