带你走进 @ 机器人时代

Discover 点击上面蓝色文字,关注我们


Python
自动化操作单元格,除了设置字体、边框外,还可以对单元格的数字格式进行各种设置:

import xlwings as xw app = xw.App(visible=False, add_book=False) wk = app.books.open('订单表.xlsx') ws = wk.sheets[0] #选中编辑区域最后一行的行号 rows = ws.range('A1').expand('table').last_cell.row print(rows) #设置数字的格式 ws.range(f'B2:B{rows}').number_format = 'yyyy年m月d日' ws.range(f'D2:D{rows}').number_format = '¥#,##0' ws.range(f'E2:E{rows}').number_format = '¥#,##0' ws.range(f'G2:G{rows}').number_format = '¥#,##0.00' ws.range(f'H2:H{rows}').number_format = '¥#,##0.00' ws.range(f'I2:I{rows}').number_format = '¥#,##0.00' wk.save('订单表.xlsx') wk.close() app.quit()


运行后,我们打开工作簿,就可以看到数字都被设置成了规定的格式:

如果我们希望给这张数据表加上一个标题,如何实现呢?

import xlwings as xw app = xw.App(visible=False, add_book=False) wk = app.books.open('订单表4.xlsx') ws = wk.sheets[0] #选择区域 t = ws.range('A1:I1') #合并单元格 t.merge() #设置字体 t.font.name = '等线' t.font.size = 20 #加粗字体 t.font.bold = True #设置字体的对齐方式 t.api.HorizontalAlignment = -4108 t.api.VerticalAlignment = -4108 #设置行高 t.row_height = 30 #保存工作簿并关闭对象 wk.save() wk.close() app.quit()

运行后我得到这样的效果:

当然如果使用openpyxl库也可以轻松设置:

from openpyxl import load_workbook from openpyxl.styles import Font, Alignment wk = load_workbook('订单表4.xlsx') ws = wk['总表'] #合并单元格 ws.merge_cells('A1:I1') #设置字体大小粗细 ws['A1'].font = Font(name='微软雅黑', size=21, bold=True) #设置单元格文字排版 ws['A1'].alignment = Alignment(horizontal='center', vertical='center') #设置行高 ws.row_dimensions[1].height = 30 wk.save('订单表4.xlsx')


需要注意的是,wk.save()函数要求必须将保存的文件写出来,否则会报错。运行后得到:

请看下表,如果我们想将重复的单元格进行合并:

如何实现,请看代码:

from openpyxl import load_workbook wk = load_workbook('订单金额表.xlsx') ws = wk['Sheet1'] #创建空列表 lists = [] num = 2 #构造永久循环 while True: #逐个读取A列单元格数据 datas = ws.cell(num, 1).value #如果有数据就将数据加入列表,否则跳出循环 if datas: lists.append(datas) else: break num += 1 s = 0 e = 0 data = lists[0] #根据列表构建循环 for m in range(len(lists)): if lists[m] != data: #如果碰到数据不同的行,重新初始化 data = lists[m] #设置e的值 e = m - 1 if e >= s: #合并数据相同的行 ws.merge_cells(f'A{s + 2}:A{e + 2}') s = e + 1 if m == len(lists) - 1: e = m #合并数据相同的行 ws.merge_cells(f'A{s + 2}:A{e + 2}') wk.save('订单金额表1.xlsx')

运行后得到:

继续坚持学习,每天都能进步一点!!!


往期回顾:

  • 来来来,送你一个金牌销售机器人,7X24小时不休,不要工资免费用!
  • 不要嫌你现在的工作很累,可能你离失业不远了!
  • 作为旅游行业的一个小老板,我受够了!这是要被淘汰的节奏吗?


本文引用和摘录相关内容,请联系侵删。

- END -


最后,文章有帮助到你的话【点赞在看
激励我们分享更多的干货!