Python3学习笔记08-Python3读写Excel表之xlwings

安装xlwings的方式是:cmd中输入pip install xlwings

 

xlwings的特色

 

  • xlwings能够非常方便的读写Excel文件中的数据,并且能够进行单元格格式的修改
  • 可以和matplotlib以及pandas无缝连接
  • 可以调用Excel文件中VBA写好的程序,也可以让VBA调用用Python写的程序。
  • 开源免费,一直在更新

1. 读一个已存在的Excel文件:

import xlwings as xw
app=xw.App(visible=False,add_book=False)
app.display_alerts=False
app.screen_updating=False
filepath='user.xls'
wb=app.books.open(filepath)
print(wb.sheets['user'].range('A2').value)
wb.sheets['user'].range('A4').value='天道酬勤'  #这句是写了
wb.save()
wb.close()
app.quit()

2. 新建的话,则是如下代码:

import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.add()
# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets['sheet1'].range('A1').value='Hello'
wb.sheets[0].range(2,1).value='World!'
wb.save(r'd:\test.xlsx')
wb.close()
app.quit()

3. 单元格的多种引用方式

# A1单元格
rng=sht[’A1']
# A1:B5单元格
rng=sht['A1:B5']
# 在第i+1行,第j+1列的单元格
# B1单元格
rng=sht[0,1]
# A1:J10
rng=sht[:10,:10]
# 可以用表示行列的tuple进行引用
# A1单元格的引用
xw.Range(1,1)
#A1:C3单元格的引用
xw.Range((1,1),(3,3))

4. 读写数据

# 将列表[1,2,3]储存在A1:C1中
sht=wb.sheets[0]
sht.range('A1').value=[1,2,3]
# 将列表[1,2,3]储存在A1:A3中
sht.range('A1').options(transpose=True).value=[1,2,3]

# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
sht.range('A1').options(expand='table').value=[[1,2],[3,4]]
# 将A1的值,读取到a变量中
a=sht.range('A1').value
#将A1到A3的值,读取到a列表中
a=sht.range('A1:A3').value
# 将第一行和第二行的数据按二维数组的方式读取
a=sht.range('A1:B2').value
print(a)

    这里特别提到一个给列赋值的问题。上例中我们知道了读取一行数据如A1:G1,可以直接用一个list来接收,赋值也同样如此。但如果是一列,仍可以用list来接收数据内容,但赋给一个列时,就有点问题了。这里会固执地把数据贴成一行而不是一列,即使你的接收区域明明是一个列,如A1:A7。这时,我们可以用NumPy来帮忙,即先把对象由1行N列变成N行1列。代码如下:
 

import numpy as np
a1=np.array(range(1,8))
print(a1)
b1=a1.reshape(7,1)
print(b1)
wb1.sheets[0].range('a1:a7').value=b1

5.常用函数和方法

Book 工作簿常用的api
wb=xw.books[‘工作簿名称']
wb.activate()激活为当前工作簿
wb.fullname 返回工作簿的绝对路径
wb.name 返回工作簿的名称
wb.save(path=None) 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
-wb. close() 关闭工作簿
代码例子:
# 引用Excel程序中,当前的工作簿
wb=xw.books.acitve
# 返回工作簿的绝对路径
x=wb.fullname
# 返回工作簿的名称
x=wb.name
# 保存工作簿,默认路径为工作簿原路径,若未保存则为脚本所在的路径
x=wb.save(path=None)
# 关闭工作簿
x=wb.close()
sheet 常用的api
# 引用某指定sheet
sht=xw.books['工作簿名称'].sheets['sheet的名称']
# 激活sheet为活动工作表
sht.activate()
# 清除sheet的内容和格式
sht.clear()
# 清除sheet的内容
sht.contents()
# 获取sheet的名称
sht.name
# 删除sheet
sht.delete
range常用的api
# 引用当前活动工作表的单元格
rng=xw.Range('A1')
# 加入超链接
# rng.add_hyperlink(r'www.baidu.com','百度',‘提示:点击即链接到百度')
# 取得当前range的地址
rng.address
rng.get_address()
# 清除range的内容
rng.clear_contents()
# 清除格式和内容
rng.clear()
# 取得range的背景色,以元组形式返回RGB值
rng.color
# 设置range的颜色
rng.color=(255,255,255)
# 清除range的背景色
rng.color=None
# 获得range的第一列列标
rng.column
# 返回range中单元格的数据
rng.count
# 返回current_region
rng.current_region
# 返回ctrl + 方向
rng.end('down')
# 获取公式或者输入公式
rng.formula='=SUM(B1:B5)'
# 数组公式
rng.formula_array
# 获得单元格的绝对地址
rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False)
# 获得列宽
rng.column_width
# 返回range的总宽度
rng.width
# 获得range的超链接
rng.hyperlink
# 获得range中右下角最后一个单元格
rng.last_cell
# range平移
rng.offset(row_offset=0,column_offset=0)
#range进行resize改变range的大小
rng.resize(row_size=None,column_size=None)
# range的第一行行标
rng.row
# 行的高度,所有行一样高返回行高,不一样返回None
rng.row_height
# 返回range的总高度
rng.height
# 返回range的行数和列数
rng.shape
# 返回range所在的sheet
rng.sheet
#返回range的所有行
rng.rows
# range的第一行
rng.rows[0]
# range的总行数
rng.rows.count
# 返回range的所有列
rng.columns
# 返回range的第一列
rng.columns[0]
# 返回range的列数
rng.columns.count
# 所有range的大小自适应
rng.autofit()
# 所有列宽度自适应
rng.columns.autofit()
# 所有行宽度自适应
rng.rows.autofit()
books 工作簿集合的api
# 新建工作簿
xw.books.add()
# 引用当前活动工作簿
xw.books.active
sheets 工作表的集合
# 新建工作表
xw.sheets.add(name=None,before=None,after=None)
# 引用当前活动sheet
xw.sheets.active

以上内容是阅读LuckyFrog笔记后的整理,特此鸣谢!

6. 一个示例,枚举指定文件夹下的Excel类型文件并删除掉K列:

import os  
  
def listdir(path, list_name):  
    for file in os.listdir(path):  
        file_path = os.path.join(path, file) 
        if os.path.splitext(file_path)[1]=='.xls' or os.path.splitext(file_path)[1]=='.xlsx':  
            list_name.append(file_path)  
        
p=r'D:\同事\王老五'
l=[]
listdir(p,l)
print(l)

import xlwings as xw
app=xw.App(visible=False,add_book=False)
app.display_alerts=False
app.screen_updating=False
    
for x in l:
    filepath=x  #'adata.xls'
    wb=app.books.open(filepath)
    
    i=0
    print(wb.fullname)
    k=wb.sheets[0].range('A300').end('up').row
    print(k)   
    while (i<k):
        i+=1
        if wb.sheets[0].range(i,11).value!=None:
            wb.sheets[0].range(i,11).value=None
    wb.save()
    wb.close()
app.quit()
del app  #这一句非常重要,否则程序结束后可能有Excel进程残留。
print('Done')

    

 

 

 

 

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值