使用Python的xlwings操作Excel的属性和方法
作者:西伯利亚的长颈鹿
这篇文章主要介绍了使用Python的xlwings操作Excel的属性和方法,xlwings 是 Python 操作 Excel 的库之一,主要作为两门语言的交互工具,是python 操作excel比较成熟、杰出的库,调用简单方便,而且功能强大,需要的朋友可以参考下
1、Excel表格的开启和关闭
1.1 打开Excel工作表格
import xlwings as xw #导入xlwings包 #新建工作簿,Visible表示是否显示Excel窗体,add_book表示是否新增一个工作表 app=xw.App(visible=True,add_book=False) wb=app.books.add()#不加这行话,Excel会一闪而过
1.2 按路径打开Excel表格
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建工作簿 app.display_alerts=False#关闭用户提示 app.screen_updating=False#关闭屏幕刷新 FilePath=r'example.xlsx'#文件路径 wb=app.books.open(FilePath)#打开Excel文档 wb.save('example.xlsx')#另存为 wb.close()#关闭工作簿 app.quit()#退出Excel
2、读写Excel内容
2.1 读取Excel单元格内容
import xlwings as xw app=xw.App(visible=False,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet #读取excel内容 value=[] value.append(sheet.used_range.value)#读取有效部分 value.append(sheet['A3'].value)#A3单元格内容 value.append(sheet['A1:B5'].value)#A1到B5单元格内容 value.append(sheet[:10,:9].value)#以A1为起始点,行10格,列9格单元格内容 value.append(sheet.range(2,2).value)#行第2格,列第2格单元格内容 value.append(sheet.cells(2,2).value)#行第2格,列第2格单元格内容 #A1到B2的内容 value.append(sheet.range(sheet.cells(1,1),sheet.cells(2,2)).value) #A1到B2的内容,可直接省略sheet.cells value.append(sheet.range((1,1),(2,2)).value) #循环输出内容 for ValueItems in value: print(ValueItems,'\n') wb.save('example.xlsx')#另存为 wb.close()#关闭工作簿 app.quit()#退出Excel
2.2向Excel写入内容
import xlwings as xw app=xw.App(visible=False,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet sheet.range('A20').value='Hello xlwings!'#A20的位置写入 sheet.range('A21').value=[1,2,3]#A21位置按横向连续写入 #A30到A32纵向连续写入,注意列表的维度必须为2,且内容需要放在第2个维度里 #[4,5,6]效果也会是横向写入 sheet.range('A30:A32').value=[[4],[5],[6]] sheet.range('A22').options(transpose=True).value=[1,2,3]#纵向写入的第二种方式 #以A28为起始位置,输入表格 sheet.range('A28').options(expand='table').value=[[1,2],[3,4]] wb.save('example.xlsx')#另存为 wb.close()#关闭工作簿 app.quit()#退出Excel
3、各元素常用的方法和属性
3.1 book的常用方法和属性
xlwings.Book(fullname=None, update_links=None, read_only=None,
format=None, password=None, write_res_password=None,
ignore_read_only_recommended=None, origin=None, delimiter=None,
editable=None, notify=None, converter=None, add_to_mru=None,
local=None, corrupt_load=None, impl=None, json=None)
- fullname (str or path-like object, default None)–现有工作簿的完整路径或名称(包括。xlsx, xlsm等)或未保存的工作簿的名称。 如果没有完整路径,将在当前工作目录中查找文件。
- update_links (bool, default None)–如果省略该参数,将提示用户指定如何更新链接
- read_only (bool, default False) –True表示以只读模式打开工作簿
- format (str)–如果打开文本文件,则指定分隔符
- password (str)—密码打开受保护的工作簿
- write_res_password (str) –写入保存时的密码
- ignore_read_only_recommended (bool, default False) –只读推荐关闭
- origin (int)–仅适用于文本文件。 指定它的起源位置。 使用平台常数。
- delimiter (str) —如果format参数为6,则指定分隔符。
- editable (bool, default False) —此选项仅适用于遗留的Microsoft Excel 4.0插件。
- notify (bool, default False) —如果文件无法以读写方式打开则通知用户。
- converter (int) -打开文件时要尝试的第一个文件转换器的索引。
- add_to_mru (bool, default False) -将此工作簿添加到最近添加的工作簿列表中。
- local (bool, default False) —如果为True以Excel语言保存文件,否则以VBA语言保存文件。 不支持macOS
- corrupt_load (int, default xlNormalLoad) —可以是“xlNormalLoad”、“xlRepairFile”或“xlExtractData”的其中一个。 不支持macOS。
- json (dict) 一个JSON对象,由MS Office Scripts或谷歌Apps Script xlwings模块交付,但以反序列化的形式,即作为字典。
import xlwings as xw def my_macro(): wb = xw.Book.caller()#另VBA反选调用Python函数 wb.sheets[0].range('A1').value = 1 app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet wb.activate() wbFilePath=wb.fullname#现有工作簿的完整路径或名称(包括。xlsx, xlsm等) wbFileName=wb.name#获取工作簿的文件名称 #sheets为表单列表,调用时里面可以输入表单名称或表单位置Index wb.sheets[1].select() Apiobject=wb.api#返回正在使用引擎的本机对象(或obj) Appobject=wb.app#返回一个代表Book创建者的应用程序对象。 wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 wb.close()#关闭工作簿 app.quit()#退出Excel print(wbFilePath) print(wbFileName) print(Apiobject) print(Appobject)
3.2 sheet的常用方法和属性
class xlwings.Sheet(sheet=None, impl=None)
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet sheet.activate()#指定sheet为当前sheet wb.sheets.add(after=sheet)#在指定sheet后面新增sheet wb.sheets.add(before=sheet)#在指定sheet前面新增sheet wb.sheets.add(name='2')#新工作表的名称。 如果为None,则默认为Excel的默认名称。 sheet.autofit('c')#rows 或者r,行自动调整适应大小 sheet.autofit('r')#Column或者c,列自动调整适应大小 sheet.autofit()#行列均自适应,不用传值 cells=sheet.cells(1,1)#单元格对象 chart=sheet.shapes#图表对象 sheet.clear()#清空表格内容 sheet.clear_contentser()#清理内容保留格式 sheet.copy()#使用方式与add类似 sheet.delete()#删除sheet SheetName=sheet.name#sheet名称 SheetPicture=sheet.pictures#sheet图像对象 SheetRange=sheet.range('A1:B32')#sheet范围对象 sheet.select#选择当前sheet SheetShapes=sheet.shapes#sheet图形对象 Sheettables=sheet.tables#sheet表格对象 #转换成PDF,属性path为路径,show为转后是否打开 #Quality为文件质量,可以为'standard'或'minimum' sheet.to_pdf() SheetUsed_range=sheet.used_range#有使用到范围对象 sheet.visible=False#sheet是否显示或隐藏,False为隐藏 print(cells.value) print(chart) print(SheetName) print(SheetRange.value) print(SheetUsed_range.value) wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 wb.close()#关闭工作簿 app.quit()#退出Excel
3.3 range的常用方法和属性
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet #各种赋值方式 Range=sheet.range('A1') Range=sheet.range('A1:C3') Range=sheet.range((1,1)) Range=sheet.range((1,1), (3,3)) Range=sheet.range(sheet.range('A1'), sheet.range('B2')) Range.value=1#范围赋值 adress='www.baidu.com'#超链接地址 text_to_display ='百度地址'#超链接的地址。 要为超链接显示的文本。 默认为超链接地址。 #当鼠标指针暂停在超链接上时显示的屏幕提示。 #默认设置为' <地址> -单击一次即可follow。 点击并按住选择这个单元格。 screen_tip="跳转到百度" Range.add_hyperlink(adress,text_to_display,screen_tip)#添加超链接 Rangehyperlink=sheet.range('A1').hyperlink#获取范围超链接,仅限单格 Rangeadress=Range.address#获取范围地址 Range.autofit()#范围自适应 Range.clear()#范围清空 Range.clear_contents()#清空内容保留格式 Range.color=(255, 128, 128) # or '#ffffff'更改背景颜色,使用RGB代码 Range.color=None#清除背景颜色 RangeColumn=Range.column#获取改区域第一列的位置,为只读属性 #column_width为可更改属性 Range.column_width=10#设置范围列宽度 RangeColumn_Width=Range.column_width#获取范围列宽度 RangeCount=Range.count#获取范围内单元格的个数 Range1=sheet.range('A20:C32') Current_Regin=Range.current_region#提取新的范围,不包括空行和空列 Range2=sheet.range('A20:A20') Range2.delete(shift='left')#删除范围,向左或向上使用。 如果省略,Excel将根据范围的形状来决定。 #返回一个Range对象,该对象表示包含源范围的区域末尾的单元格。 # 相当于按Ctrl+上,Ctrl+下,Ctrl+左,或Ctrl+右,使用 'up', 'down', 'right', 'left' RangeEnd=Range1.end(direction='up') RangeEepand=Range1.expand(mode='table')#返回范围扩展的区域,不同于End,table为Down&Right sheet.range('A19:B19').formula='=A21+B21'#范围公司赋值 sheet.range('B21:B23').value=2 sheet.range('A19').formula_array='=A21:A23*B21:B23'#范围公司赋值范围公式 AdressList=[] #get_address(row_absolute=True, column_absolute=True, include_sheetname=False, external=False) # row_absolute (bool,默认为True) -设置为True将引用的行部分作为绝对引用返回。 # column_absolute (bool,默认为True) -设置为True返回引用的列部分为绝对引用。 # include_sheetname (bool,默认为False) -设置为True以包括地址中的Sheet名称。 如果忽略外部= True。 # external (bool,默认为False) -设置为True返回带有工作簿和工作表名称的外部引用。 AdressList.append(sheet.range((1,1)).get_address()) AdressList.append(sheet.range((1,1)).get_address(False, False)) AdressList.append(sheet.range((1,1), (3,3)).get_address(True, False, True)) AdressList.append(sheet.range((1,1), (3,3)).get_address(True, False, external=True)) # 右shift (str,默认为None) -使用右或下。 #如果省略,Excel将根据范围的形状来决定。 # copy_origin (str,默认format_from_left_or_above) #使用format_from_left_or_above或format_from_right_or_below。 Range1.insert(shift='right',copy_origin='format_from_left_or_above') LastCell=Range1.last_cell#范围内的最后一个单元格,只读属性 Left=Range1.left#返回从A列左边缘到范围左边缘的距离,以点为单位,只读属性 Range.top#返回从第1行的上边缘到范围上边缘的距离(以点为单位),只读属性。 Range.width#返回范围宽度 Range.height#返回范围的高度 # 从指定的Range对象创建一个合并单元格。 # across(bool,默认为False) - True将指定范围的每一行中的单元格合并为单独的合并单元格。 Range1.merge(across=False) MregeBoolean=Range1.merge_cells#如果Range包含合并单元格则返回True,否则返回False RangeName=Range.name#设置或获取Range的名称。 note=Range.note#返回一个Note对象。及单元格注释内容 Range1.number_format= '0.00%'#设置单元格内容格式 #返回一个Range对象,该对象表示一个与指定范围偏移的Range。 RangeOffset=Range1.offset(row_offset=1,column_offset=1) #destination (xlwings.Range) - xlwings指定范围将被复制到的范围。 #如果省略,范围将复制到剪贴板。 Range1.copy(destination=Range)#将范围复制到目标范围或剪贴板。 sheet.pictures.add(image='1.jpeg',left=0,top=0,width=100,height=100) #将范围作为图片复制到剪贴板。 # appearance (str,默认'screen') -要么是'screen'要么是' printer '。 # format (str,默认为'picture') - 'picture'或' bitmap '。 sheet.range('A1:C8').copy_picture(appearance='screen', format='picture') Range1.paste()#粘贴剪切板内容 # row_size (int > 0) -新范围内的行数(如果为None,则范围内的行数不变)。 # column_size (int > 0) -新范围内的列数(如果为None,则范围内的列数不变)。 RangeResize=Range.resize(row_size=2,column_size=2)#调整范围大小 RangeRow=Range1.row#返回指定范围内的第一行的编号,只读属性。 RangeRow=Range1.rows#返回一个RangeRows对象,它表示指定范围内的行。 # 获取或设置Range的高度(以点为单位)。 # 如果Range中的所有行具有相同的高度,则返回高度。 # 如果Range中的行有不同的高度,则返回None。 RangeRowHeight=Range1.row_height Range1.select#选择范围,仅适用于打开的工作簿 Range1.shape#返回范围没的shape对象 Range1.sheet#返回范围所属的sheet Range1.size#返回Range中元素的数量。 Range1.table#返回Range的table对象 Range1.to_png(path='123.jpg')#保存为图片,path为路径 Range1.unmerge()#接触合并 Range1.value#范围内的值 print(RangeRowHeight) print(RangeRow) print(RangeResize) print(RangeOffset) print(note) print(RangeName) print(MregeBoolean) print(Left) print(LastCell) print(Rangehyperlink) print(AdressList) print(RangeEnd) print(Current_Regin.value) print(RangeCount) print(Rangeadress) print(RangeColumn) print(RangeColumn_Width) print(RangeEepand) #wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 #wb.close()#关闭工作簿 #app.quit()#退出Excel
3.4 rows、columns、shapes、pictures、tables等对象集合
#可以使用Rows或者Columns定位到表格行与列 #可以使用shapes、pictures、tables定位表格中的所有shape、picture、table等 import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet rng = xw.Range('A1:C4') for r in rng.rows: print(r.address) for c in rng.columns: print(c.address) for s in sheet.shapes: print(s.name) for p in sheet.pictures: print(p.name) for t in sheet.tables: print(t.name) # wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 # wb.close()#关闭工作簿 # app.quit()#退出Excel
3.5 shape的常用方法和属性
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet Shape=sheet.shapes[1] #Shape.delete()#删除图形 #与range一样的left,top,width,height Shape.left Shape.top Shape.width Shape.height ShapeName=Shape.name#Shape的名称 ShapePrent=Shape.parent#返回Shape的父元素,也就是Sheet Shape.text="这是一个Shape"#设置图形内位置,如果是Chart的Shape是不可用的 ShpeType=Shape.type#返回形状的类型。 print(ShpeType) print(ShapePrent) print(ShapeName) wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 wb.close()#关闭工作簿 app.quit()#退出Excel
3.6 chart常用属性与方法
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet sheet.range('A1').value = [['Foo1', 'Foo2'], [1, 2]] chart = sheet.charts.add(left=50,top=50,width=300,height=300)#添加Chart chart.set_source_data(sheet.range('A1').expand()) chart.chart_type = 'line'#返回并设置图表的图表类型。 #以下图表类型可供选择: # 3d_area, 3d_area_stacked, 3d_area_stacked_100, # 3d_bar_clustered, 3d_bar_stacked, 3d_bar_stacked_100, # 3d_column, 3d_column_clustered, 3d_column_stacked, # 3d_column_stacked_100, 3d_line, 3d_pie, 3d_pie_exploded, # area, area_stacked, area_stacked_100, bar_clustered, bar_of_pie, # bar_stacked, bar_stacked_100, bubble, bubble_3d_effect, # column_clustered, column_stacked, column_stacked_100, combination, # cone_bar_clustered, cone_bar_stacked, cone_bar_stacked_100, cone_col, # cone_col_clustered, cone_col_stacked, cone_col_stacked_100, # cylinder_bar_clustered, cylinder_bar_stacked, cylinder_bar_stacked_100, # cylinder_col, cylinder_col_clustered, cylinder_col_stacked, # cylinder_col_stacked_100, doughnut, doughnut_exploded, # line, line_markers, line_markers_stacked, # line_markers_stacked_100, line_stacked, # line_stacked_100, pie, pie_exploded, # pie_of_pie, pyramid_bar_clustered, # pyramid_bar_stacked, pyramid_bar_stacked_100, # pyramid_col, pyramid_col_clustered, pyramid_col_stacked, # pyramid_col_stacked_100, radar, radar_filled, radar_markers, # stock_hlc, stock_ohlc, stock_vhlc, stock_vohlc, # surface, surface_top_view, surface_top_view_wireframe, # surface_wireframe, xy_scatter, xy_scatter_lines, # xy_scatter_lines_no_markers, xy_scatter_smooth, # xy_scatter_smooth_no_markers #与Shape一样,同样拥有name、left、top、width、height、 #name、parent、delete,使用方法一样 chart.name chart.left chart.top chart.width chart.height chart.name chart.parent # to_png与之前讲过的方式一样 chart.to_png('1456.jpg') chart.delete() wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 wb.close()#关闭工作簿 app.quit()#退出Excel
3.7 picture的常用方法和属性
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet # image (str,类似路径的对象或Matplotlib .figure. figure) -一个文件路径或Matplotlib图形对象。 # left(float,默认为None) -点的左侧位置,默认为0。 如果使用top/left,则不能为anchor提供值。 # top (float,默认无)-顶点位置,默认为0。 如果使用top/left,则不能为anchor提供值。 # width(float,默认None) -以点为单位的宽度。 默认为原始宽度。 # height (float,默认无)-高度,以点为单位。 默认为初始高度。 # name (str,默认None) - Excel图片名称。 如果没有提供,默认为Excel标准名称,例如“图1”。 Picture=sheet.pictures.add(image='2.jpeg',left=0, top=0,width=100,height=100,name='NewPicture') #同样拥有name、left、top、width、height、 #name、parent、delete,使用方法一样 Picture.name Picture.left Picture.top Picture.width Picture.height Picture.name Picture.parent wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 wb.close()#关闭工作簿 app.quit()#退出Excel
3.8 table常用方法和属性
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet sheet['A1'].value = [['a', 'b'], [1, 2]] #添加table,source为数据,name为table名称 table = sheet.tables.add(source=sheet['A1'].expand(), name='MyTable') TableBodyRange=table.data_body_range#返回一个范围对象,该对象表示不包括标题行在内的值范围 table_name=table.name#返回或设置指定Table对象的名称 Header_row_range=table.header_row_range#返回表示标题行范围的xlwings范围对象 tablerange=table.range#返回表的xlwings范围对象。 table.resize(sheet.range('A1:C3'))#通过提供一个xlwings范围对象来调整Table的大小 table.show_autofilter=False#通过将自动过滤器设置为True或False来打开或关闭它 table.show_headers=False#显示或隐藏标题 table.show_table_style_column_stripes=True#返回或设置列条纹表样式用于 table.show_table_style_first_column=True#第一列 table.show_table_style_last_column=True#最后一列 table.show_table_style_row_stripes=True#行 table.show_totals=True#汇总行开关 tablestyle=table.table_style#获取或设置表样式。 RowRange=table.totals_row_range#返回一个表示Total行的xlwings范围对象 print(RowRange) print(tablestyle) print(tablerange) print(Header_row_range) print(table_name) print(TableBodyRange) # wb.save('example.xlsx')#另存为,当内容为(Path=None)为仅保存,不是另存 # wb.close()#关闭工作簿 # app.quit()#退出Excel
3.9 font的常用方法和属性
import xlwings as xw app=xw.App(visible=True,add_book=False)#新建Excel对象 wb=app.books.open(r'example.xlsx')#打开新工作簿 sheet=wb.sheets[0]#指定为开启工作簿的第一个sheet Fon=sheet.range('A20').font Fon.bold=True#字体加粗 Fon.color = (255, 0, 0) # or '#ff0000' 设置字体颜色 Fon.italic=True#斜体 Fon.name = '黑体'#设置字体 Fon.size=50#设置字体大小 characters=sheet.range('A20').characters[0:5]#提取部分字符段 characters.font.color = (255, 128, 0)#部分字符段设置
到此这篇关于使用Python的xlwings操作Excel的属性和方法的文章就介绍到这了,更多相关xlwings操作Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!