提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、xlwings简介
  • 二、安装与使用
    • 1.安装
    • 2.使用
    • 3.xlwings结构说明
  • 二、xlwings对App常见的操作
    • App基础操作
    • 工作簿的基础操作
    • 工作表的基础操作
      • 工作表其他操作
    • 读取单元格的基础操作
      • Range其他操作
    • 写入单元格的基础操作
    • 写入一行或一列Excel数据(函数式)

一、xlwings简介

python操作Excel的模块,python中能操作Excel的库,网上提到的模块大致有:xlwings、xlrd、xlwt、openpyxl等,一共九个库

所以我综合了一下就打算用xlwings
他的特点:

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

二、安装与使用

1.安装

pip install xlwings

中文使用文档说明:https://www.kancloud.cn/gnefnuy/xlwings-docs/1127450

2.使用

app=xw.App()wb=app.books.open(r'文件地址') # 这里的r指的是不转义特殊字符# 1.打开Excelapp=xw.App(visible=True,add_book=False)# visible是否可见,False表示在后台运行,add_book是否新增一张Excel操作,在新增wb上运行# 2.对excel操作时候屏幕是否更新app.screen_updating=True #默认True# 3.返回所有book对象集合print(app.books)#只返回通过xw打开的workbook,手动打开的不返回# 4.退出excelapp.kill()#终止进程app.quit()#退出excel程序

3.xlwings结构说明

根据我们写的代码也可以看出
excel基本结构分为 Application ——> Workbooks ——> Worksheets ——> Range
即应用程序 ——> 工作簿 ——> 工作表 ——> 单元格。

其他的没什么不好理解的(如果用过excel)这里的range的含义其实指的是范围也称为区域,(你所需要进行操作的范围)比如a1到f1这样

二、xlwings对App常见的操作

App基础操作

import xlwings as xw app = xw.App(visible=True, add_book=False)app.display_alerts = False# 关闭一些提示信息,可以加快运行速度。 默认为 True。app.screen_updating = True# 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。wb = app.books.add()sht = wb.sheets.active

工作簿的基础操作

 wb = app.books.add() # 新建工作簿。 wb = app.books.open(r'file_path')# 打开现有的工作簿 wb = app.books.active# 获取当前活动的工作簿

工作表的基础操作

sht = wb.sheets.active # 获取当前活动的工作表sht = wb.sheets[0] # 按索引获取工作表sht = wb.sheets['Sheet1']# 按表名获取工作表sht1 = wb.sheets.add() # 新建工作表,默认新建的放在最前面。sht1 = wb.sheets.add('新建工作表', after=sht) # 新建工作表,放在sht工作表后面。

工作表其他操作

app=xw.App()wb=app.books.open(r'C:\Users\Administrator\Desktop\1test.xlsm')sht=wb.sheets[0]1.sheets返回所有的工作表print(wb.sheets)2.active返回正在被操作的sht,sht=wb.sheets[0]print(sht.activate)3.add(name=None,before=None,after=None)添加shtwb.sheets.add(name='hello_xlwings')4.autofit(axis=None)自动调整行和列栗子import xlwings as xwwb=xw.Book()wb.sheets[0].range('a1').value='hello xlwings'#对第一张表a1赋值wb.sheets[0].autofit('c') #columns=cwb.sheets[0].autofit('r') #rows=rwb.sheets[0].autofit()5.book sht所属的workbooksht=wb.sheets[0]print(sht.book) #属于workbook6.cells返回一个range对象,表示sheet上的所有单元格print(sht.cells)print(sht.cells.shape)7.charts返回sheet中所有图标的集合print(sht.charts)8.clear()print(sht.clear())#清除内容颜色格式...9.clear_contents()print(sht.clear_contents()) #清除内容10.delete() 删除sheetsht.delete()11.pictures 返回所有pictures对象的集合print(sht.pictures)12.index 返回工作表的索引print(sht.index)#第一个为113.name,sheet name的操作print(sht.name) #获得sht的名字sht.name='xlwingstest'#修改sht的名字print(sht.name)

读取单元格的基础操作

cell1 = sht.range('cell1')# 获取 cell1 中的值v = cell1.value# 也可以根据行列号读取cell1_value = sht.range(3,2).value# 读取一段区间内的值a1_c4_value = sht.range('a1:c4').options(ndim=2).value # 加上 option 读取二维的数据a1_c4_value = sht.range((1,1),(4,3)).options(ndim=2).value # 和上面读取的内容一样。

Range其他操作

app=xw.App()wb=app.books.open(r'C:\Users\Administrator\Desktop\1test.xlsm')sht=wb.sheets[0]1.add_hyperlink(address,text_to_display=None,screen_tip=None)添加超链接sht.range('a1').add_hyperlink(address='www.baidu.com',text_to_display='百度',screen_tip='我是百度哦')2.clear()删除range里面的内容和格式3.clear_contents()删除内容4.color获取单元格的背景颜色print(sht.range('a1').color)#没有颜色的时候返回Nonesht.range('a1').color=(100,100,100) #设置颜色print(sht.range('a1').color)5.column返回range的列6.column_width获取单元格的列宽print(sht.range('a1').column_width)#获取宽度sht.range('a1').column_width=33 #设置宽度print(sht.range('a1').column_width)7.columns返回RangeColumns对象,表示指定范围内的列print(sht.range('a1:c3').columns)8.count返回单元格数量9.end(direction),返回一个range对象,类似Ctrl+Up(down,left,right)print(sht.range('a1:a65536').end('down').row) #返回最后有值一行10.formula 获取设置单元格的公式sht.range('a1').formula='=b1+c1'#设置# print(sht.range('a1').formula)#获取11.formula_array 获取设置单元格的数组公式sht.range('a1').formula_array='=b1+c1'#设置print(sht.range('a1').formula_array)#获取的值并没有{}包裹12.get_address(row_absolute=True,column_absolute=True,include_sheetname=False,external=False)返回地址13.height返回高度 row_heightprint(sht.range('a1').height) #获取行高sht.range('a1').row_height=33 #设置行高print(sht.range('a1').row_height) #获取行高14.hyperlink返回地址15.last_cell返回指定range右下角的单元格16.left返回从第一列到range第一列的距离17.name设置获取range的名称18.number_format获取设置range的内容格式19.offset(row_offset=0,column_offset=0)rng=sht.range('a1:c3')rng=rng.offset(row_offset=2,column_offset=2)print(rng)#返回偏移后的array c3:e520.options(convert=None,)...21.raw_value获取设置传递的值22.row返回行23.row_height 在上方height的时候已经举栗子24.rows返回rangerows25.select()26.shape返回几行几列27.size返回range中元素数量print(sht.range('a1:d100').size)#有400个cell28.top返回第一行到range第一行的距离29.value获取设置range的值sht.range('a1').value='123'print(sht.range('a1').value)# 引用当前活动工作表的单元格rng=xw.Range('A1')# 加入超链接# rng.add_hyperlink(r\'www.baidu.com\',\'百度\',‘提示:点击即链接到百度\')# 取得当前range的地址rng.addressrng.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_regionrng.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# 行的高度,所有行一样高返回行高,不一样返回Nonerng.row_height# 返回range的总高度rng.height# 返回range的行数和列数rng.shape# 返回range所在的sheetrng.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()

写入单元格的基础操作

一维

sht.range(3,2).value = ='welcome'sht.range('A1').value=[1,2,3]# 将A1,B1,C1单元格的值存入list1列表中list1=sht.range('A1:C1').value# 将1,2,3分别写入了A1,A2,A3单元格中sht.range('A1').options(transpose=True).value=[1,2,3]# 将A1,A2,A3单元格中值存入list1列表中list1=sht.range('A1:A3').value

二维

# 将a1,a2,a3输入第一列,b1,b2,b3输入第二列list1=[['a1','a2','a3'],['b1','b2','b3']]sht.range('A1').value=list1

写入一行或一列Excel数据(函数式)

import xlwings as xwdef write_col(io, sheet, col='A1', data=None):"""一次写多列注意点:此方法所需的data参数必须是list嵌套,如:[[1, 9], [2, 8], [3, 7], [4, 6]],并且里面的每个list的长度必须一致写入一列数据:param io: Excel文件:param sheet: sheet,int或者str类型:param col: 哪一列,如:'A1':param data: 要写入的数据,list类型:return:"""wb = xw.Book(io)if isinstance(sheet, str):sht = wb.sheets(sheet)else:sht = wb.sheets[sheet]sht.range(col).options(transpose=True).value = datawb.save()wb.app.quit() def write_row(io, sheet, row=\'A1\', data=None):"""写入一行数据一次写多行注意点:此方法所需的data参数必须是list嵌套,如:[[1, 2], [3, 4], [5, 6]],并且里面的每个list的长度必须一致:param io: Excel文件:param sheet: sheet,int或者str类型:param row: 哪一行,如:'A1':param data: 要写入的数据,list类型:return:"""wb = xw.Book(io)if isinstance(sheet, str):sht = wb.sheets(sheet)else:sht = wb.sheets[sheet]sht.range(row).value = datawb.save()wb.app.quit()