xlwings使用教程

您所在的位置:网站首页 xlwings操作excel xlwings使用教程

xlwings使用教程

2023-03-24 09:10| 来源: 网络整理| 查看: 265

xlwings介绍

python操作Excel的模块,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl、pyxll等,他们提供的功能归纳起来有两种:一、用python读写Excel文件,实际上就是读写有格式的文本文件,操作excel文件和操作text、csv文件没有区别,Excel文件只是用来储存数据。二、除了操作数据,还可以调整Excel文件的表格宽度、字体颜色等。另外需要提到的是用COM调用Excel的API操作Excel文档也是可行的,相当麻烦基本和VBA没有区别

xlwings中文文档

https://www.kancloud.cn/gnefnuy/xlwings-docs/1127474

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

一、引入库 1import xlwings as xw 二、打开 excel 1234567891011# 打开Excel程序,默认设置:程序可见,只打开不新建工作薄,屏幕更新关闭 app=xw.App(visible=True,add_book=False) app.display_alerts=False app.screen_updating=False # 其他操作: # app.screen_updating = False   # :屏幕更新,就是说代码对于excel的操作你可以看见,关闭实时更新可以加快脚本运行。默认是True。 # app.pid    #App进程pid # app.books  #返回一个打开的全部workbook的列表。Python打开的和手动打开的是不互通的 # 终止进程,强制退出。 # app.quit() #不保存的情况下,退出excel程序 三、工作簿

注意工作簿应该首先被打开

1、新建Excel文档 123wb = app.books.add() #创建新的book wk = xw.Book() wk = xw.books.add()

2、 打开Excel文档 1234567# 支持绝对路径和相对路径 wb = app.books.open('filepath') wk = xw.Book('filepath') wk = xw.books.open('filepath') # 练习的时候建议直接用下面这条 # wb = xw.Book('example.xlsx') # 这样的话就不会频繁打开新的Excel 3、打开未储存或未关闭的excel实例 12wk = xw.Book('Book1')     wk = xw.books['Book1']  #也可以使用索引

如果在两个Excel实例中打开了相同的文件,则需要完全限定它并包含应用程序实例。 您将通过xw.apps.keys()找到您的应用实例密钥(PID):

12345678xw.apps[10559].books['FileName.xlsx'] 查看所有的实例进程: xw.apps.keys() #输出list kill所有的实例进程: for i in xw.apps.keys():   i = 'taskkill/pid ' + str(i) + ' -t -f'       os.system(i) 4、打开活动的工作簿 1wb = xw.books.active

5、保存 12wb.save(path=None) # 保存工作簿,若为指定路径,保存在当前工作目录。  6、关闭 1wk.close()  #在没有保存的情况下关闭。 7、退出Excel 1app.quit() 四、工作表 1、打开工作表 123# 可以用名字也可以用索引 sheet = xw.books['工作簿的名字'].sheets['sheet的名字'] sheet = xw.books['工作簿的名字'].sheets[0] 2、打开活动工作表 1sheet = xw.sheets.active 3、返回sheet指定的book 1book_name = sheet.book 4、返回一个range对象,表示sheet上所有的单元格 1sheet_cells = sheet.cells 5、获取或设置Sheet的名称 123sheet.name # 返回所有的工作表特定名称。 sheet_names_list = sheet.names

6、获取sheet中的所有图表集合 1sheet.charts 7、清空表中所有数据和格式。 1sheet.clear() 8、清除工作表的内容,但保留格式 1sheet.clear_contents() 9、删除工作表 1sheet.delete() 10、返回表索引(与excel相同) 1sheet.index 11、创建一个新的Sheet并使其成为活动工作表 12wb.sheets.add(name=None, before=None, after=None) #参数:name(str,default None) - 新工作表的名称。 如果为None,则默认为Excel的name.before (Sheet, default None) - 一个对象,指定在新工作表添加之前的added.after (Sheet, default None) - 指定工作表之后的工作表的对象 表格已添加。 12、在整个工作表上自动调整列,行或两者的宽度 12sheet.autofit(axis=None) # 参数:axis (string, default None) –要自动调整行, 使用以下之一: rows 或 r,要自动调整列, 使用以下之一: columns h c,要自动调整行和列, 不提供参数 13、获取excel sheet多少行多少列 123456app = xw.App(visible=False, add_book=False) xls = app.books.open(excel_file) sheet = xls.sheets[0] info = sheet.used_range nrows = info.last_cell.row ncols = info.last_cell.colum 五、单元格 1、引用A1单元格 1234rng = xw.books['工作簿的名字'].sheets['sheet的名字'] # 或者 sheet=xw.books['工作簿的名字'].sheets['sheet的名字'] rng=sheet.range('A1') 2、引用活动工作表上的单元格 12345678910111213141516# 注意Range首字母大写 rng=xw.Range('A1') 其中需要注意的是单元格的完全引用路径是: # 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格 xw.apps[0].books[0].sheets[0].range('A1') 迅速引用单元格的方式是 sht=xw.books['名字'].sheets['名字'] # A1单元格 rng=sht[’A1'] rng=sht['a1'] # A1:B5单元格 rng=sht['A1:B5'] # 第一行的第一列即a1 rng=sht[0,0] # B1单元格 rng=sht[0,1] 3、引用区域单元格 12345# A1:J10 rng=sht[:10,:10] rng=sht.range('a1:a5') #rng = sht['a1:a5'] #rng = sht[:5,0]

PS: 对于单元格也可以用表示行列的tuple进行引用

1234# A1单元格的引用 xw.Range(1,1) #A1:C3单元格的引用 xw.Range((1,1),(3,3)) 六、写入数据 1、写入单个值 12# 注意".value“ sht.range('A1').value=1 2、写入列表

默认按行插入

1234# 将列表[1,2,3]储存在A1:C1中 sht.range('A1').value=[1,2,3] # 等同于 sht.range('A1:A3').value = [1,2,3]

按列插入

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

多行输入就要用二维列表了

12# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4 sht.range('A1').options(expand='table').value=[[1,2],[3,4]] 七、读取数据 1、读取单个值 12# 将A1的值,读取到a变量中 a=sht.range('A1').value 2、读取范围的值

返回的值是列表形式,多行多列为二维列表,但有一点要注意,返回的数值默认是浮点数

1234#将A1到A2的值,读取到a列表中 a=sht.range('A1:A2').value # 将第一行和第二行的数据按二维数组的方式读取 a=sht.range('A1:B2').value

读取excel的第一列,先计算单元格的行数

12rng = sht.range('a1').expand('table') nrows = rng.rows.count

接着就可以按准确范围读取了

1a = sht.range(f'a1:a{nrows}').value

同理选取一行的数据也一样

123ncols = rng.columns.count #用切片 fst_col = sht[0,:ncols].value 八、常用函数和方法 1、Book 工作簿常用的api 123456789101112131415161718192021# 新建工作簿 xw.books.add() # 引用当前活动工作簿 xw.books.active 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() 2、sheet 常用的api 12345678910111213141516# 新建工作表 xw.sheets.add(name=None,before=None,after=None) # 引用当前活动sheet xw.sheets.active # 引用某指定sheet sht=xw.books['工作簿名称'].sheets['sheet的名称'] # 激活sheet为活动工作表 sht.activate() # 清除sheet的内容和格式 sht.clear() # 清除sheet的内容 sht.contents() # 获取sheet的名称 sht.name # 删除sheet sht.delete 3、range常用的api 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071# 引用当前活动工作表的单元格 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()

作者:LuckyFrog 链接:https://www.jianshu.com/p/e21894fc5501 来源:简书 著作权归作者所有。

参考资料:

https://docs.xlwings.org/en/stable/index.html

https://www.kancloud.cn/gnefnuy/xlwings-docs/1127450



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3