全部产品
云市场

rpa.excel

更新时间:2019-09-18 15:39:20

目录

excel

要使用excel模块,需要使用rpa.excel

excel模块是用来向用户提供一系列操作Excel的SDK,让用户通过简单的参数和方法调用来实现一些复杂的操作。

open

open(file, visible=False, readonly=False, password=None, write_password=None)

  • file : 文件路径
  • visible : 是否可见
  • readonly : 只读
  • password : 文件密码
  • write_password : 设置密码

该方法会启动一个Excel进程并打开文档,可以通过visible来控制这个Excel进程是可见。
返回一个类型的对象。

  1. xls = rpa.excel.open(r'C:\xxx.xlsx')

create

create(*, visible=False)

  • visible : 是否可见

该方法会启动一个Excel进程并新建一个文档,可以通过visible来控制这个Excel进程是可见。
返回一个类型的对象。

  1. xls = rpa.excel.create()

Class: Excel

Excel : 负责为用户提供Excel相关的一些操作。

Excel实例不再被使用时,建议close()它,否则会不断产生残留的Excel进程。

save

save(self, *, file=None)

  • file : 另存为文件路径

保存或者另存当前Excel文件,当不输入另存路径的时候就是保存当前已打开的Excel。

  1. xls.save()

close

close(self, *, save=True)

  • save : 默认保存

关闭Excel。

  1. xls.close()

sheets

sheets(self) ->list

获得Excel所有的sheet列表。

  1. print(xls.sheets())

add_sheet

add_sheet(self, sheet_name, location, *, relative=”before”)

  • sheet_name : sheet名称
  • location : 定位插入位置的sheet的名称
  • relative : 插在location的sheet的前还是后 输入before|after

location的sheet前或者后插入新的sheet。新增sheet,返回sheet对象。

  1. sheet = xls.add_sheet("sheetxxx","sheet4")

get_sheet

get_sheet(self, sheet_name=None)

  • sheet_name : sheet名称

根据sheet的名称sheet_name获取指定sheet,如果不传则返回当前激活的sheet。
返回一个的实例

  1. sheet = xls.get_sheet("sheet1")

remove_sheet

remove_sheet(self, sheet_name)

  • sheet_name : sheet名称

根据sheet的名称sheet_name删除指定的sheet。

  1. xls.remove_sheet("sheet1")

rename_sheet

rename_sheet(self, old_sheet_name, new_sheet_name)

  • old_sheet_name : 原sheet名称
  • new_sheet_name : 新sheet名称

重命名sheet。

  1. xls.rename_sheet("sheet1","sheet4")

Class: Sheet

Sheet负责为用户提供Sheet相关的一些操作。

read

read(self, range, *, only_visible=False, skip=0, max=1000)

  • range : ‘A’为列 ‘1’为行 ‘A1’为单元格 ‘A1:B2’为范围
  • only_visible : 只读可见
  • skip : 跳过多少行后开始读
  • max : 读列或者范围时不能超过max的范围

从该sheet中读取内容。
可以读取列的内容,读取行的内容,读取单元格的内容,读取一个范围的内容。
返回读取到的内容。

  1. #读取单元格A1
  2. print(sheet.read("A1"))
  3. #读取第一行
  4. print(sheet.read("1"))
  5. #读取A列,跳过1行,从第2行开始读,只读可见的,最多读10条
  6. print(sheet.read("A",skip=1,max=10,only_visible=True))
  7. #读取A1:C3的范围
  8. print(sheet.read("A1:C3"))

write

write(self, range, value, start_row=1, start_col=’A’, max=1000)

  • range : ‘A’为列 ‘1’为行 ‘A1’为单元格 A1:B2为范围
  • value : 当range为列/行的时候传入一维数组,为单元格则传入str,为范围时候传入二维数组 /
  • start_row : 写入列时表示从哪一行开始写此参数仅当写入列时有效
  • start_col:写入行时表示从哪一行开始写此参数仅当写入行是有效 可传入‘1’|’A’|’a’
  • max: 写入列/行/范围时不能超过max的范围

向该sheet中写入数据。
可以向单元格写入内容,可以向行写入内容,可以向列写入内容。

  1. #写入单元格A1,内容为sss
  2. sheet.write("A1","sss")
  3. #写入第1行,数据为[1,2,3]
  4. sheet.write("1",[1,2,3])
  5. #写入A列,从第2行开始写,内容为[3,4,5,6,7]
  6. sheet.write("A",[3,4,5,6,7],start_row="2")
  7. # 一次性写入数据
  8. sheet.write("A1:B2",[[4,5],[6,7]], max=10)

通过read write实现转置

  1. def getChars(length):
  2. def getChar(number):
  3. factor, moder = divmod(number, 26)
  4. modChar = chr(moder + 65)
  5. if factor != 0:
  6. modChar = getChar(factor - 1) + modChar
  7. return modChar
  8. return [getChar(index) for index in range(length)][length - 1]
  9. def start():
  10. '''
  11. 创建一个五行五列的数据表格实现转置
  12. 1 1 1 1 1
  13. 2 2 2 2 2
  14. 3 3 3 3 3
  15. 4 4 4 4 4
  16. 5 5 5 5 5
  17. '''
  18. wb = rpa.excel.open(r"C:\word_demo.xlsx")
  19. ws=wb.get_sheet()
  20. a_list = ws.read("A1:E5")
  21. wb.close()
  22. wb = rpa.excel.create()
  23. ws = wb.get_sheet()
  24. count=1
  25. for i in a_list:
  26. ws.write("{}".format(getChars(count)),i)
  27. count+=1
  28. wb.save(file=r"C:\excel_demo.xlsx")

copy

copy(self, range)

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围

复制范围内的数据,一般搭配paste使用。

  1. #复制单元格
  2. sheet.copy("A1")
  3. #复制第1行
  4. sheet.copy("1")
  5. #复制第A列
  6. sheet.copy("A")
  7. #赋值A1:C3范围
  8. sheet.copy("A1:c3")

paste

paste(self, col, row, *, paste_type=’数值’, retry=3)

  • col : 起始列号
  • row : 起始行号
  • type : 全部 公式 数值 格式 批注 验证 所有使用源主题的单元 边框除外 列宽 公式和数字格式 值和数字格式 所有合并条件格式
  • retry : 重试次数

粘贴范围内的数据,一般搭配copy使用。重试次数用于设置粘贴失败时尝试粘贴的最大次数。

  1. sheet.paste("A","1",paste_type="公式")

paste_range

paste_range(self, range, *, paste_type=’数值)

  • range : 如’A1:B2’
  • paste_type : 全部 公式 数值 格式 批注 验证 所有使用源主题的单元 边框除外 列宽 公式和数字格式 值和数字格式 所有合并条件格式

向范围内粘贴数据,一般搭配copy使用。

  1. sheet.paste("A","1",paste_type="公式")

row_count

row_count(self) -> str

获得该sheet的行数。
返回行数。

  1. print(sheet.row_count())

col_count

col_count(self) -> str

获得该sheet的列数。
返回列数。

  1. print(sheet.col_count())

sort

sort(self, sort_fields, *, range=None, match_case=False, sort_method=’pinyin’, contains_header=False)

  • range :查找范围: 如’A1:C5’, 如果为空则查找整个Sheet(默认整个Sheet)
  • sort_fileds : 排序字段数组 sort_fields = [(‘A’, ‘value’, ‘desc’), (‘B’, ‘cell_color’, ‘asc’)]
  • match_case : 是否区分大小写
  • sort_method : 排序方法 字母、笔划
  • contains_header : 是否包含标题 默认False

对指定范围进行排序。

  1. sheet.sort([('A', 'value', 'desc'),('B', 'cell_color', 'asc')])

filter

filter(self, col, array, *, delete=False)

  • col : 列号
  • array : 筛选值数组
  • delete : 筛选后是否删除

对列进行筛选。

  1. #在A列筛选等于1或者2的值
  2. sheet.filter("A",[1,2])
  3. #当筛选内容为=号打头,需要在这个=前再加一个=,否则会被当成符号而非内容,例如要删选"= aa"需要写成这样
  4. sheet.filter("A",['== aa='])

remove_filter

remove_filter(self)

移除筛选。

  1. sheet.remove_filter()

multi_filter

multi_filter(self, filters_val,*,range = None, delete=False)

  • filters_val : 按以下格式书写 {‘A’:[‘testA1’,’testA2’,’testA3’],’B’:[‘testB1’,’testB2’]’…}
  • range :筛选列范围: 如’A1:C5’, 如果为空则筛选整个Sheet(默认整个Sheet)
  • delete : 筛选后是否删除

对多列进行筛选

  1. #在范围B1:C14Z中,筛选B列等于1或者2 且 C列等于11或者22的值
  2. sheet.multi_filter({
  3. 'B':['1','2','3'],
  4. 'C':['11','22']
  5. },range = 'B1:C14')
  6. #当筛选列为数字,且在excel中显示为eg: 1,412.41 5,666,234.34 等类似加了',' 的数字时,
  7. #过滤条件也需要加','(英文的逗号)
  8. sheet.multi_filter({
  9. 'B':['1,412.41','5,666,234.34']
  10. })

run_macro

run_macro(self, macro_name, *, file=None)

  • macro_name : 宏命令名称
  • file : 宏文件(.xlsm)路径

运行宏。可以使用本文件中的宏也可以使用外部文件的,此时需要外部文件的路径,赋值给file

  1. OpenMacro = rpa.excel.open(r'C:\test.xlsx',visible=True)
  2. ws = OpenMacro.get_sheet()
  3. ws.run_macro("宏2",file=r"C:\test.xlsm")

merge_cell

merge_cell(self, range, *, each_row=False)

  • range : 需要合并的范围,必须为 A1:B2的格式
  • each_row : 是否行内合并

合并单元格。

  1. sheet.merge_cell("A1:B2",each_row=True)

insert

insert(self, range, *, insertDirection=None)

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围
  • insertDirection : 插入方向 下移 右移

插入功能。

  1. sheet.insert("A1")
  2. sheet.insert("A")
  3. sheet.insert(1)
  4. sheet.insert("A1:B2")

delete

delete(self, range, *, insertDirection=None)

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围
  • insertDirection : 插入方向 上移 左移

删除功能。

  1. sheet.delete("A1")
  2. sheet.delete("A")
  3. sheet.delete(1)
  4. sheet.delete("A1:B2")

remove_duplicate

remove_duplicate(self, range, cols)

  • range : ‘A’为列 ‘A1:B2’为范围
  • cols : 去重列号的集合

列去重功能。

  1. sheet.remove_duplicate("A1:D9",["A","C"])

create_pivottable

create_pivottable(self, data_sheet, data_range, pivot_sheet,pivot_range, pivot_settings)

  • data_sheet : 透视表源数据所在Sheet名称 ,如’Sheet1’
  • data_range : 透视表源数据范围 ,如’A1:C10’
  • pivot_sheet : 透视表插入的Sheet名称 ,如’Sheet2’
  • pivot_range : 透视表插入的位置 ,如’A1’
  • pivot_settings : 透视表设置

pivot_settings.values中的Function:

Function 说明
xlSum 求和
xlCount 计数
xlAverage 平均值
xlMax 最大值
xlMin 最小值
xlProduct 乘积
xlCountNums 数值计数
xlStDev 标准偏差
xlStDevP 总体标准偏差
xlVar 方差
xlVarP 总体方差

创建透视表。

  1. xls = rpa.excel.open(r'C:\test.xlsx',visible = True)
  2. sheet = xls.get_sheet('原数据')
  3. pivot_settings = rpa.excel.PivotTableSettings('MyPivotTable')
  4. pivot_settings.columns['购买者'] = {} # 添加"列标签"
  5. pivot_settings.filters['日期'] = {} # 添加"筛选字段"
  6. pivot_settings.rows['类型'] = {} # 添加"行标签"
  7. pivot_settings.values['金额'] = {"Function": "xlSum"} # 添加"数值"
  8. sheet.create_pivottable('原数据', 'A1:D8', '透视表', 'A1', pivot_settings)
  9. xls.save()

refresh_pivottable

refresh_pivottable(self, *, index=1)

  • index : 数据透视表编号,如果有多张透视表需指定第几张

刷新数据透视表。
数据透视表序号:默认值是1,若一张sheet表中有多个透视表,需要指定具体序号。

  1. sheet.refresh_pivottable(index=1)

get_all_pivot_field_items

get_all_pivot_field_items(self, name, *, index=1)

  • name : 字段名
  • index : 数据透视表编号,如果有多张透视表需指定第几张

获取数据透视表某个字段下所有的可选项。

  1. sheet.get_all_pivot_field_items("aaa")

select_pivot_field_items

select_pivot_field_items(self, name, array, *, index=1, select=True)

  • name : 字段名
  • array :待选择的值列表
  • index : 数据透视表编号,如果有多张透视表需指定第几张
  • select : 选择或取消

选择/取消选择一组透视表筛选项。

  1. sheet.select_pivot_field_items("aaa", ["1","2"])

find

find(self, text, *, range=None, count=0) -> list

  • text : 查找的内容
  • range : 查找范围: 如’A1:C5’, 如果为空则查找整个Sheet(默认整个Sheet)
  • count : 0表示查找所有匹配项(默认为0)
  • 返回值: 二维数组,每行都是一个返回结果,第一列是行号,第二列是列号,第三列是匹配的单元格里的值; 返回0表示未找到任何匹配项

查找指定内容功能。

  1. print(sheet.find("AAA"))

add_picture

add_picture(self, file, col, row, width=None, height=None)

  • file : 插入图片的路径
  • col : 左上角单元格的列号
  • row : 左上角单元格的行号
  • width : 图片的宽度
  • height : 图片的高度

向指定位置插入图片。不设置宽高按原图大小插入,设置宽高中的一个会按比例缩放,都设置有可能会导致图片变形。

  1. sheet.add_picture(r"C:\aaa.jpg","A","2")

get_row_height

get_row_height(self, row) -> str

  • row : 行号

获得指定行高度。

  1. print(sheet.get_row_height("1"))

set_row_height

set_row_height(self, row, height)

  • row : 行号
  • height : 行高

设置指定行高度。

  1. sheet.set_row_height("1","20")

get_col_width

get_col_width(self, col) -> str

  • col : 列号

获得指定列宽度。

  1. print(sheet.get_col_width("A"))

set_col_width

set_col_width(self, col, width)

  • col : 列号
  • width : 列宽

设置指定列宽度。

  1. sheet.set_col_width("A","40")

get_formula

get_formula(self, range) ->str

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围

获取指定范围的公式。

  1. print(sheet.get_formula("A1"))
  2. print(sheet.get_formula("1"))
  3. print(sheet.get_formula("A"))
  4. print(sheet.get_formula("A1:C2"))

set_formula

set_formula(self, range, formula)

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围
  • formula : 公式

设置指定范围的公式。

  1. sheet.set_formula("B4","=SUM(B1:B3)")

get_style

get_style(self, range, style) ->str

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围
  • style : fontsize fontcolor fontname bgcolor

获取指定范围的样式。

  1. print(sheet.get_style("A1","fontname"))

set_style

set_style(self, range, style, value, color_format=None)

  • range : ‘A’为列 ‘1’位行 ‘A1’为单元格 ‘A1:B2’为范围
  • style : fontsize fontcolor fontname bgcolor
  • value : 设置该属性的值,如果style为fontcolor/bgcolor,则value可以为’#FFFFFF’或者’255,255,255’
  • color_format : 颜色类型,如果style为fontcolor/bgcolor,需设置format为’HEX’或者’RGB’

设置指定范围的样式。

  1. sheet.set_style("A1","fontname","黑体")

get_comment

get_comment(self, range) ->str

  • range : ‘A1’为单元格 ‘A1:B2’为范围

获取指定范围的注释。

  1. print(sheet.get_comment("A1"))
  2. print(sheet.get_comment("A1:C2"))

set_comment

set_comment(self, range, comment)

  • range : ‘A1’为单元格 ‘A1:B2’为范围
  • comment : 注释

往指定范围插入注释。

  1. sheet.set_comment("A1","xxx")
  2. sheet.set_comment("A1:C2","xxx")

replace

replace(self, text, replacement, *, range=None, match_case=False)

  • text : 查找的内容
  • replacement : 替换成的内容
  • range : 查找范围: 如’A1:C5’, 如果为空则查找整个Sheet(默认整个Sheet)
  • match_case : 是否大小写匹配

替换指定内容。

  1. print(sheet.replace("AAA","ddd"))

to_pdf

to_pdf(self, file)

  • file : 保存的pdf路径

转化成pdf。

  1. sheet.to_pdf(r"C:\test.pdf"))

activate

activate(self)

激活当前sheet。

  1. sheet.activate()