利用xlwings自动化操作Excel表格

利用xlwings自动化操作Excel表格

import xlwings as xw
import numpy as np
import pandas as pd
#详细内容参考网站 https://docs.xlwings.org/en/stable/course.html


"""1.建立表格连接对象"""
#1.1.新建工作簿
app = xw.App(visible=True,add_book=False)#visible=True可以看到新建的工作簿,add_book=True再新建一个表格
app.display_alerts = False    # 关闭一些提示信息,可以加快运行速度。 默认为 True。
app.screen_updating = True    # 更新显示工作表的内容。默认为 True。关闭它也可以提升运行速度。
wb = app.books.add()  #新建工作簿
wb.activate()   #激活为当前工作簿
wb.save('xlwings实验表.xlsx')  #保存工作簿为指定名字
wb.close()  #关闭工作簿,但是显示的文件并不会关闭
app.quit()  #退出应用---显示的文件也关闭


#1.2.利用已经有的工作簿
wb=xw.Book('xlwings实验表.xlsx')#将目标excel表格与wb相连接
wb.sheets#所有表格名称
sheet = wb.sheets[0]#将表格中的sheet1建立连接
sheet=wb.sheets['sheet1']#将表格中的sheet1建立连接


#1.3.操作工作簿
wb = app.books.add()                   # 新建工作簿
wb = app.books.open(r'file_path')      # 打开现有的工作簿
wb = app.books.active                  # 获取当前活动的工作簿
sheet = wb.sheets.active                 # 获取当前活动的工作表
sheet = wb.sheets.add()                 # 新建工作表,默认新建的放在最前面。
sheet = wb.sheets.add('新建工作表', after=sheet)   # 新建工作表,放在sht工作表后面。

"""2.查看表格基本信息"""
wb.fullname#查看目标excel表格所在路径
wb.name#工作簿名称
sheet.name#查看工作表名称


"""3.对表格基本操作"""

#3.1.选取单元格区域
#3.1.1.引用指定坐标单元格:通过三种方式引用单元格A1
cell=sheet.range('cell')
cell=sheet[0,0]
cell=xw.Range('cell')
cell.value#打印表格中cell位置的数据

#3.1.2.引用指定区域
range=sheet.range('a1:c10')#引用区域
range=sheet[0:9,0:3]#引用区域
value = sheet.range('a1:c10').options(ndim=2).value       # 加上 option 读取二维的数据
range.count  #返回区域中单元格的格数
range.row  # 返回区域的第一行行标
range.last_cell  #获得区域中右下角最后一个单元格
range.width#获得区域的宽度
range.address   #取得区域的绝对地址
range.shape#返回区域的行数和列数
range.column#返回单元格列表
range.row#返回单元格行表

#3.2.在表格中读写数据
#3.2.1.读写数据
sheet.range('A1').value='第一个数据'#在单元格A1中实时写入数据
sheet.range('A1').add_hyperlink(r'www.baidu.com','百度','提示:点击即链接到百度')  # 指定单元格加入超链接
sheet.range('A1').clear_contents()  # 清除该单元格内容
sheet.range('A1').clear()#将表格A1位置的数据和格式实时清除
sheet.clear()#将工作表中的内容清空
sheet.range('D4').value=np.random.rand(16,7)#从起始位置单元格输入数据
xw.Range('E21').value=34#直接从工作簿写入数据,默认写入第一个工作表
data_np=sheet.range('D4').expand().value#从起始位置单元格'D4'批量读取数据
data_pd=sheet.range('D4').options(pd.DataFrame,expand='table').value#将数据读取为数据框

#3.2.2.通过循环填充单元格B1:B50
for i in range(1,51):
    sheet.range('B'+str(i)).value=i*2

#3.2.3.查写单元格公式
sheet.range('A1').formula='=SUM(B1:B50)'#通过输入excel公式计算单元格之和
formula=sheet.range('A1').formula_array#查看单元格A1位置的公式
sheet.range('A2').formula=formula

#3.3.修改单元格格式
#3.3.1.修改行宽列高
sheet.range('A1').row_height#获取单元格的行高
sheet.range('A1').row_height=19#修改单元格的行高
sheet.range('A1').column_width#获取单元格的列宽
sheet.range('A1').column_width=19#修改单元格的列宽
sheet.range('A1').columns.autofit()#单元格列宽自动适应
sheet.range('A1').rows.autofit()#单元格列宽自动适应

#3.3.2.修改颜色
sheet.range('A1').color#获取单元格的颜色
sheet.range('A1').color=(32,14,214)#给单元格增加颜色
sheet.range('A1').color=None#清空单元格颜色
sheet.range('a1:c10').color=(32,14,214)#给区域增加颜色

#3.3.3.修改字体格式
sheet.range('A1').color = 255,200,255         # 设置单元格的填充颜色
sheet.range('A1').Font.ColorIndex = 3     # 设置字体的颜色,具体颜色索引见下方。
sheet.range('A1').Font.Size = 24          # 设置字体的大小。
sheet.range('A1').Font.Bold = True        # 设置为粗体。
sheet.range('A1').HorizontalAlignment = -4108    # -4108 水平居中。 -4131 靠左,-4152 靠右。
sheet.range('A1').VerticalAlignment = -4130      # -4108 垂直居中(默认)。 -4160 靠上,-4107 靠下, -4130 自动换行对齐。
sheet.range('A1').NumberFormat = "0.00"          # 设置单元格的数字格式。

#3.3.4.合并拆分单元格
sheet.range('D1:H1').merge()      # 合并单元格 C8 到 D8
sheet.range('D1:H1').unmerge()    # 拆分单元格。
sheet.range('D1:H1').value=8

#3.3.5.设置边框
# Borders(9) 底部边框,LineStyle = 1 直线。
sheet.range('A1').api.Borders(9).LineStyle = 1
sheet.range('A1').api.Borders(9).Weight = 3  # 设置边框粗细。

# Borders(7) 左边框,LineStyle = 2 虚线。
sheet.range('A1').api.Borders(7).LineStyle = 2
sheet.range('A1').api.Borders(7).Weight = 3

# Borders(8) 顶部框,LineStyle = 5 双点划线。
sheet.range('A1').api.Borders(8).LineStyle = 5
sheet.range('A1').api.Borders(8).Weight = 3

# Borders(10) 右边框,LineStyle = 4 点划线。
sheet.range('A1').api.Borders(10).LineStyle = 4
sheet.range('A1').api.Borders(10).Weight = 3

# Borders(5) 单元格内从左上角 到 右下角。
sheet.range('A1').api.Borders(5).LineStyle = 1
sheet.range('A1').api.Borders(5).Weight = 3

# Borders(6) 单元格内从左下角 到 右上角。
sheet.range('A1').api.Borders(6).LineStyle = 1
sheet.range('A1').api.Borders(6).Weight = 3

#如果是一个区域的单元格,内部边框设置如下
# Borders(11) 内部垂直边线。
sheet.range('A1').api.Borders(11).LineStyle = 1
sheet.range('A1').api.Borders(11).Weight = 3

# Borders(12) 内部水平边线。
sheet.range('A1').api.Borders(12).LineStyle = 1
sheet.range('A1').api.Borders(12).Weight = 3

#3.3.6.插入 、删除 一行
sheet.range('a3').api.EntireRow.Delete()  # 会删除 ’a3‘ 单元格所在的行。
sheet.api.Rows(3).Insert()  # 会在第3行插入一行,原来的第3行下移。

#插入 、删除 一列
sheet.range('c2').api.EntireColumn.Delete()  # 会删除 ’c2‘ 单元格所在的列。
sheet.api.Columns(3).Insert()  # 会在第3列插入一列,原来的第3列右移。(也可以用列的字母表示)


"""3.将matplotlib的图表写入excel"""
import matplotlib.pyplot as plt
data=np.random.rand(30)
fig=plt.figure(figsize=(10,8))
plt.plot(data)
#add(image, link_to_file=False, save_with_document=True, left=0, top=0, width=None, height=None, name=None, update=False)
sheet.pictures.add(fig,name='图片',update=True,left=40,top=30,width=40,height=40)#在表格的指定位置插入指定大小的图片
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江姐vior

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值