|
楼主 |
发表于 2024-1-19 15:28
|
显示全部楼层
- import xlwings as xw # 导入xlwings模块
- from pathlib import Path
- # xlwings操作Excel的套路——引领
- app = xw.App(visible=True, add_book=False) # 启动Excel
- wb = app.books.open(r'E:\WPS练习题\业绩提成表.xlsx') # 打开Excel工作簿
- sht = wb.sheets['业绩提成'] # 定位引用工作表
- arr = sht.range("A1").expand().value # 读取工作表内容
- brr = [x for x in arr if x[2].find('小') > -1] # 加工处理数据
- brr.insert(0, arr[0]) # 添加表头
- sht.range('l1:p5').value = brr # 处理后数据写入工作表
- wb.save() # 保存
- wb.close() # 关闭
- app.quit() # 退出Excel
- # 新建工作簿
- app = xw.App(visible=True, add_book=False)
- wb = app.books.add() # 新建工作簿
- wb.save(r'E:\Python操控Excel\练习.xlsx') # 保存工作簿
- sht = wb.sheets[0] # 引用指定工作表
- sht.name = '员工信息表' # 重命名工作表
- sht.range("A1").value = [1, 2, 3, 4, 5] # 行写入数据
- sht.range("B2:F2").value = ['a', 'b', 'c', 'd', 'e'] # 行写入数据
- sht.range("a2").options(transpose=True).value = ['A', 'B', 'C', 'D'] # 列写入数据
- sht.range("A1:C3").clear_contents() # 指定区域清楚数据
- sht.clear_contents() # 整个工作表清楚数据
- arr = [['序号', '姓名', '性别', '年龄'], [1, '张三', '男', 23], [2, '李敏', '女', 18], [3, '马超', '男', 36]]
- sht.range("A1:D1").color = (247, 109, 221) # 给单元格区域添加底色
- # rng.color = None # 取消底色
- sht.range("A1:D1").font.color = (255, 255, 255) # 给字体添加颜色
- sht.range("a1:d1").font.name = '微软雅黑' # 设置字体
- sht.range("a1:d1").font.size = 14 # 设置字号
- sht.range("A1:D1").font.bold = True # 设置是否加粗
- sht.range("a1").resize(len(arr), len(arr[0])).value = arr # 数组一次性写入单元格区域中
- brr = [4, "貂蝉", "女", 24] # 添加一条记录
- # rn = sht.range("A1").expand('down').last_cell.offset(1, 0) # 定位
- # end(参数)方法返回区域内的边界单元格,参数有:up,down,right,left。得到的结果与按Ctrl+up,Ctrl+down,Ctrl+right,Ctrl+left
- rn = sht.range('A1').end('down').offset(1, 0) # 定位
- rn.value = brr # 把记录写入工作表
- # 获取单元格区域行数和列数——shape属性
- tup = sht.range('A1').expand('table').shape # 数据区域的行数和列数,得到一个元组
- print(tup) # (5, 4)
- row_nums = tup[0] # 行数是5
- col_nums = tup[1] # 列数是4
- sht.cells(row_nums+1, 1).value = [5, '唐伯虎', '男', 28] # 添加一条新数据
- # 获取单元格区域的单元格数,行数,列数——count属性
- rnge = sht.range('A1').expand('table') # 和省略table是一样的。
- cell_nums = rnge.count # 获取单元格区域内单元格个数
- cls = rnge.size # 获取单元格区域内单元格个数
- r_nums = rnge.rows.count # 获取单元格区域内的行数
- c_nums = rnge.columns.count # 获取单元格区域内的列数
- print(cell_nums, r_nums, c_nums, cls)
- # sht.clear() # 清除工作表,包括内容格式。还可以清除受保护的工作表的内容
- wb.sheets.add('员工工资表', after='员工信息表') # 在员工信息表后面新建一个表,命名为员工工资表
- area = sht.range("a1").expand() # 向下向右的扩展区域,是方法
- area2 = sht.range("A1").current_region # 当前单元格区域,是属性
- # 两者区域是有区别的,要深刻理解合理运用。
- print(area)
- print(area2)
- rng = area.last_cell # 区域内最后一个单元格
- r = rng.row # 单元格所在的行号
- c = rng.column # 单元格所在的列号
- print(r, c)
- area.autofit() # 自动调整区域的行高和列宽
- area2.wrap_text = True # 设置单元格区域自动换行
- app.screen_updating = False # 关闭屏幕更新,可以加速脚本运行
- app.display_alerts = False # 关闭消息提醒
- app.calculate() # 重算工作簿
- app.display_alerts = True
- app.screen_updating = True
- wb = app.books.active # 引用当前活动工作簿
- wb.activate() # 激活wb工作簿
- wb.activate(steal_focus=True) # 激活wb工作簿,并把窗口显示到最上层,并且把焦点从Python切换到Excel
- pth = wb.fullname # 获取工作簿的完整路径。
- print(pth) # E:\Python操控Excel\练习.xlsx
- wbn = wb.name # 获取工作薄名称(带扩展名)
- n = wb.names # 返回工作薄中定义过的所有公式名称(名称管理器中可见,当然也可以隐藏)
- print(n) # 如果工作簿中没有定义过公式名称,那么返回的将是一个空序列
- wb.app.calculation = 'manual' # 计算模式改为手动计算。有三种模式:manual(手动), automatic(自动), semiautomatic(半自动)三种方式
- # shts和shts1有可能相同,也有可能不同
- shts = xw.sheets # 引用当前活动工作薄中的所有工作表
- shts1 = wb.sheets # 引用指定工作簿中的所有工作表
- # sht.delete() # 删除工作表(可以删除隐藏的工作表,但是不能删除深度隐藏的工作表)
- b = sht.book # 工作表所在的工作簿对象
- print(b)
- # sht.cells.clear() # 清除
- rng = sht.used_range # 引用工作表中用过的区域,如果空表,则返回A1单元格
- print(rng)
- i = sht.range('A1').end('down').row+1
- sht.cells(i, 1).value = "合计"
- sht.cells(i, 4).formula = '=sum(d2:d'+str(i-1)+')' # 单元格中写入公式
- # 单元格格式设置
- sht.range("G1").value = 0.06
- sht.range('f1').value = 45309
- sht.range("g1").number_format = "0.00%"
- sht.range('f1').number_format = "e-m-d"
- # 复制粘贴——rng.copy(destination=None)——把一个区域拷贝到目的区域或者剪贴板
- sht.range('A1').expand().copy(wb.sheets('员工工资表').range('A1'))
- # 参数:destination 设置目标区域,如果省略,rng区域会被拷贝到剪贴板上
- ''' rng.paste(paste=None, operation=None, skip_blanks=False, transpose=False)
- paste
- all_merging_conditional_formats(将粘贴所有内容,并且将合并条件格式)
- all(粘贴全部内容)
- all_except_borders(粘贴除边框外的全部内容)
- all_using_source_theme(使用源主题粘贴全部内容)
- column_widths(粘贴复制的列宽)
- comments(粘贴批注)
- formats(粘贴复制的源格式)
- formulas(粘贴公式)
- formulas_and_number_formats(粘贴公式和数字格式)
- validation(粘贴有效性)
- values(粘贴值)
- values_and_number_formats(粘贴值和数字格式)
- operation
- add(加)
- divide(除)
- multiply(乘)
- subtract(减)
- skip_blanks (bool, default False)
- 设为 True 时忽略空白单元格
- transpose (bool, default False)
- 设为 True 时对行列转置
- '''
- # 插入
- sht.range("A3:D4").insert(shift='down', copy_origin='format_from_left_or_above')
- '''shift (str, default None)
- 指定单元格的移动方向,可选:right 或者 down 。如果省略,Excel根据区域的形状决定。
- copy_origin
- 这个参数决定了**从何处复制插入单元格的格式,**可选 format_from_left_or_above 或 format_from_right_or_below
- '''
- # 删除
- sht.range("A3:D3").delete(shift='up')
- '''参数:shift (str, default None) – 使用 left 或 up 。如果省略,Excel根据区域的形状决定
- 可以理解为右侧单元格左移 或者 下方单元格上移
- 注意:区域删除后,会被其他单元格补上,但是此时xlwings中的rng已经没了,需要重新选定这个区域才能继续操作
- '''
- # 合并单元格
- sht.range("F3:G4").merge() # 合并成一个单元格
- sht.range('f5:g6').merge(across=True) # 跨列合并
- rngg = sht.range("F3").merge_area # 返回合并单元格区域
- print(rngg)
- print(sht.range('g4').merge_cells) # 判断是否合并单元格
- sht.range("f5").unmerge() # 取消单元格合并
- # 设置超级链接
- sht.range('f6').add_hyperlink(r'https://club.excelhome.net', 'Excel之家', '提示:点击即链接到Excel之家')
- # 插入图片
- sht.range("I4:J11").merge()
- p = sht.pictures.add(r'C:\Users\Administrator\Desktop\应用程序\图片\image5.jpg')
- p.top = sht.range("I4").top
- p.left = sht.range('I4').left
- p.width = sht.range('I4:J11').width
- p.height = sht.range('I4:J11').height
- p.delete()
- # 综合应用——新建一个图片工作表,批量插入图片
- sh = wb.sheets.add('图片', after='员工工资表')
- sh.range("A1:A6").column_width = 15
- sh.range("A1:A6").row_height = 115
- j = 1
- pts = Path(r'E:\Python操控Excel')
- lst = pts.glob("*.jpg")
- for ws in lst:
- p = sh.pictures.add(ws)
- p.top = sh.range("A"+str(j)).top
- p.left = sh.range("A"+str(j)).left
- p.width = sh.range("A"+str(j)).width
- p.height = sh.range("A"+str(j)).height
- sh.cells(j, 2).value = ws.stem
- j += 1
- sh.range('A1:B1').insert('down')
- sh.range('A1:B1').row_height = 25
- sh.range('a1').value = '图片'
- sh.range('b1').value = '名称'
- # 下面引用API,一用就卡死,代码不往下运行,效果是有的。都能居中
- # area.api.HorizontalAlignment = -4108 # 垂直居中
- # area.api.verticalAlignment = -4108 # 水平居中
- sht.select() # 员工信息表被选中,即当前活动表格。注意:只能在活动工作簿中选择
- wb.save() # 保存工作簿
- wb.close() # 关闭工作簿
- # app.quit() # 退出Excel
- app.kill() # 通过杀掉进程,强制退出Excel
复制代码
|
评分
-
2
查看全部评分
-
|