当前位置: 首页 > 办公技巧 > 正文

python办公技巧(Python学习笔记 | 办公自动化之使用xlwings模块操作Excel)

  • 叁碗诸角 叁碗诸角
  • 办公技巧
  • 2023-07-03 23:06:44
  • 0

“人生苦短,我用python”!目前流行的这句话,道出了Python高效的特点,办公自动化正是Python的一个典型应用领域。学会使用python自动化处理Excel和Word等文件,能够减少大量重复劳动,科学管理文件,提高办公效率。



Python里能够操作Excel的模块有xlrd、xlwd、openpyxl和pandas,xlwings模块是其中之一。xlwings支持对xls和xlsx文件的读写,相比其它模块,xlwings的功能和效率更高,扩展性强。

xlwings模块应用的基本流程是:App→Book→Sheet→Range


App:创建App实例,相当于打开Excel软件,可以创建多个AppBook:使用App对象创建Book工作簿,可以创建多个工作簿,每个工作簿对应一个Excel文件Sheet:使用Book对象创建Sheet工作表,Book创建完毕后会自带3个Sheet(Sheet1、Sheet2、Sheet3),还可以使用Book再继续增加SheetRange:使用Sheet对象引用单元格区域Range,实现读写操作

1、xlwings模块基本流程

xlwings模块的基本使用方法很简单,不再单项介绍,综合演示代码如下:

import xlwings as xwapp = xw.App(visible=False, add_book=False) # 创建App对象(打开Excel软件),对象不可见,不自动添加工作簿app.display_alerts = False # 关闭提示信息app.screen_updating = False # 关闭屏幕更新,节省资源workbook = app.books.add() # 创建一个工作簿,自动生成三个工作表:Sheet1、Sheet2、Sheet3sheet1 = workbook.sheets.add(after='Sheet1') # 在Sheet1的后面创建工作表,名称为默认则为Sheet4sheet1.range('A1').value = 'hello' # 在当前工作表Sheet4的A1单元格中输入文本hellosheet2 = workbook.sheets['Sheet1'] # 引用工作表Sheet1sheet2.activate() # 激活Sheet1,使Sheet1变成当前编辑窗口sheet2.range('A1').value = 'world' # 在Sheet1的A1单元格输入文本worldworkbook.sheets('Sheet3').activate() # 激活工作表Sheet3,sheets()和sheets[]是等效的workbook.sheets(3).range('A1').value = 'welcome' # 使用sheet的序号引用sheet1.select() # 选择变量里保存的工作表,跟激活相同print(sheet1.name, sheet1.cells, sheet1.index) # 输出工作表的名字、单元格范围、索引workbook.save('test.xlsx') # 保存工作簿,文件名为test.xlsxworkbook.close() # 关闭工作簿app.quit() # 退出App对象

注:程序运行后会自动打开Excel软件,并建立一个工作簿,有四个工作表:Sheet1、Sheet4、Sheet2和Sheet3。close语句只负责关闭工作簿,并不负责保存,所以在close上面必须加save方法。app.quit()语句必须要写,否则打开的Excel软件不会关闭。

2、单元格读写


单个单元格赋值:sht.range('A1').value = 内容文本横向连续单元格赋值:sht.range('A1').value = 内容列表纵向连续单元格赋值:sht.range('A1').options(transpose=True).value = 内容列表矩阵区域连续赋值:sht.range('A1').options(expand='table').value = 内容列表或sht.range('A1').expand(mode='table').value = 内容列表range.offset(row_offset=偏移量,column_offset=偏移量)方法range.resize(row_size=行数,column_size=列数)方法range.current_region方法,表示全选

向单元格里写内容,演示代码:

import xlwings as xwapp = xw.App(visible=True, add_book=False)wb = app.books.open('test.xlsx') # 打开已经存在的Excel表格文件sht1 = wb.sheets('Sheet1')sht2 = wb.sheets('Sheet2')sht3 = wb.sheets('Sheet3')# Sheet1的单元格A1=1、B1=2、C1=3sht1.range('A1').value = [1, 2, 3]# 下面这种书写方式结果与上面相同sht1.range('A10:C10').value = [1, 2, 3]# transpose是转置的意思,即Sheet2单元格A1=1、A2=2、A3=3sht2.range('A1').options(transpose=True).value = [1, 2, 3]# 下面这三种书写方式结果不会为C1-C3及F1-F3赋值,如果不转置,列表内容就会横向赋值sht2.range('C1:C3').value = [1, 2, 3]sht2.range('F1').options(mode='down').value = [1, 2, 3]sht2.range('A10').expand(mode='down').value = [1, 2, 3]# 以下两行代码实现矩形区域赋值,即A1=1、B1=2、C1=3、A2=4、B2=5、C2=6# 参数有down、right、table三种sht3.range('A1').options(expand='table').value = [(1, 2, 3), (4, 5, 6)]sht3.range('A10').expand(mode='table').value = [(1, 2, 3), (4, 5, 6)]wb.save()wb.close()app.quit()

读取单元格内容,演示代码如下:

import xlwings as xwapp = xw.App(visible=True, add_book=False)wb = app.books.open('test.xlsx')sht = wb.sheets('Sheet3')# 读取A1单元格的内容a1 = sht.range('A1').value# 同样是读取A1单元格的内容a2 = sht['A1'].value# 读取A10:C11单元格的内容,结果是一个二维数组a3 = sht.range('A10:C11').value# 同样是读取A10:C11单元格的内容,ndim=2表示二维数组a4 = sht.range('A10:C11').options(ndim=2).valueprint(a1)print(a2)print(a3)print(a4)wb.save()wb.close()app.quit()输出结果:1.01.0[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]][[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]

3、单元格设置

import xlwings as xwapp = xw.App(visible=True, add_book=False)app.display_alerts=Falseapp.screen_updating=Falsewb = app.books.open('test.xlsx')sht = wb.sheets('Sheet1')rng = sht.range('A1:C1')# 设置行高和列宽rng.row_height = 32rng.column_width = 20# 自动调整单元格大小rng.autofit()rng.rows.autofit()rng.columns.autofit()# 设置和清除单元格背景颜色(填充颜色),赋值为RGB形式rng.color = (255, 255, 0)rng.color = Nonerng.color = 255, 255, 0# 设置文字的样式需要调用api来完成,api是指调用系统原生应用# 颜色值为16进制时,顺序跟RGB相反,不知原因rng.api.Font.Color = 0x0000ff # 文字颜色为红色rng.api.Font.Size = 30 # 文字尺寸为30rng.api.Font.Bold = True # 字体加粗rng.api.Font.Name = '微软雅黑' # 字体为微软雅黑# 设置水平对齐和垂直对齐方式,系统设置好了固定值# 水平居中:-4108,靠左:-4131,靠右:-4152,靠上:-4160,靠下:-4107,自动换行对齐:-4130rng.api.HorizontalAlignment = -4108rng.api.VerticalAlignment = -4108# 设置边框# 线型:实线1,虚线-4115,点划线4,划线后跟两点5,点式线-4118,双线-4119,倾斜线13,无线-4142# 粗细:细线(最细)1,细线2,中-4138,粗线4(最粗)rng.api.BorderAround(LineStyle=4, Weight=4, Color=(0, 0, 0))rng.api.Borders.LineStyle = 1rng.api.Borders.Weight = 4# 单独设置区域的侧边框,采用Borders(n)的形式# 左侧边框7,顶部边框8,底部边框9,右侧边框10,区域内部所有垂直边框11,区域内部所有水平边框12rng.api.Borders(9).Weight = 1rng.api.Borders(10).LineStyle = 4# 设置数字类型单元格格式rng.api.NumberFormat = '0.00'# 调用Excel公式sht.range('D1').formula = '=SUM(A1:C1)'# 插入行列# 在A7单元格处插入一个单元格,A7下面单元格下移sht.range('A7').insert()# 在第5行上面插入一行sht.api.Rows(5).Insert()# 在第2列前面插入一列sht.api.Columns(2).Insert()# 删除行列# 只删除A8单元格,下面单元格向上移sht.range('A8').delete()# 删除第8整行,删除B列sht.range('8:8').delete()sht.range('B:B').delete()# 合并单元格,参数across为真时,指定区域内每行分别合并,参数为假时,则整个区域合并成一个区域sht.range('A12:C14').merge(across=False)wb.save()wb.close()app.quit()

最新文章