Python xlwings操作Excel(摸鱼划水必备技能)——(1)各元素属性及方法
在日常工作中,或多或少会使用到excel工具。有时繁琐重复的excel会让人感到很无聊和乏味,并且浪费大量的时间。如果你也是这样,这个时间救星就到了,学好Python的xlwings包,摸鱼无烦恼。文章为个人笔记,部分代码需要根据实际情况进行调整。............
目录
3.4 rows、columns、shapes、pictures、tables等对象集合
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)#部分字符段设置
更多推荐
所有评论(0)