导入的库
import xlwings as xw
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
新建或打开Excel
#创建一个excel并保存
wb = xw.Book()
sht=wb.sheets['Sheet1']
wb.save(r'D:\test1.xlsx')#也可以直接打开已有的Excel
wb = xw.Book(r'D:\test1.xlsx')#方法2:
app=xw.App(visible=True,add_book=False)
app.display_alerts=False #不显示Excel消息框
app.screen_updateing=False #关闭屏幕更新,可加快宏的执行速度
wb=app.books.open(r'D:\test.xlsx')
print(wb.fullname) #输出Excel绝对路径D:\test.xlsx#最后关闭工作簿
wb.close()
app.quit() # 退出excel程序,
# app.kill() 通过杀掉进程强制Excel app退出
Excel单元格操作
#单元格赋值
sht.range('A1').value='2'
sht.range('C3').api.NumberFormat = "0.00" # 设置单元格的数字格式。此时A1显示2.00
#二维数组赋值
sht.range('A1').value=[['a','b','c'],[1,2,3]]#sht.range('A1:B3').value将以一维数组的方式显示值
#用二维数组显示列值
sht.range('A1:B3').options(ndim=2).value#显示整个table,可用以下两种方法
rng1 = sht.range('A1').expand('table').value
rng2 =sht.range('A1').options(expand='table').value#清空从A1开始扩展出的table值
sht.range('A1').expand('table').clear()#numpy数组的方式赋值
sht.range('A1').value = np.eye(3) #3*3单位矩阵
sht.range('A1').options(np.array, expand='table').value#dataframe赋值
df=pd.DataFrame([[1,2],[3,4]],columns=['A','B'])
#取消index和columns
sht.range('A9').options(index=False,header=False).value=df#插入pyplot绘制的图表
fig=plt.figure()
plt.plot([1,2,3])
sht.pictures.add(fig,name='MyPlot',update=True,left=sht.range('D1').left,top=sht.range('D1').top)
#update=True可以在Excel上调整大小并定位图:后续调用同名的pictures.add()('MyPlot')会更新图片而不改变它的位置或大小。#设置所获取日期的单元格值的格式
my_date_handler = lambda year, month, day, **kwargs: "%04i-%02i-%02i" % (year, month, day)
sht.range('A1').options(dates=my_date_handler).value #单元格值为2021/4/9,得到值为'2021-04-09'#获取整个sheet的行列
nrow1=sht.api.UsedRange.Rows.count
ncol1=sht.api.UsedRange.Columns.count#获取指定区域的最后一行和最后一列
rng=sht.range('A9').expand()
nrow2=rng.last_cell.row
ncol2=rng.last_cell.column#获取单元格行列
print(sht.range('B3').row) #3
print(sht.range('B3').column) #2#清除工作表的所有内容(除图片)但保留原有格式
sht.clear_contents()
单元格格式操作
sht.range('A1').row_height=30 #设置单元格高度
sht.range('A1').column_width=25 #设置单元格宽度sht.range('A1').color=(250,210,38) #设置单元格颜色
sht.range('A1').color=None #清除颜色 sht.range('D2').formula='=sum(A2,B2)'#使用公式
print(sht.range('D2').formula_array) #获取单元格公式#设置单元格字体、字号、粗体、字体颜色
sht.range('B2').value = '销售数据报表'
sht.range('B2').api.Font.name='黑体'
sht.range('B2').api.Font.Size=48
sht.range('B2').api.Font.Bold=True
sht.range('B2').api.Font.Color=0X0000FF #修改字体颜色为红色
sht.range('B2').column_width = 60"""设置单元格的对齐方式"""
sht.range('B2').api.HorizontalAlignment = -4108 # -4108 水平居中。 -4131 靠左,-4152 靠右。
sht.range('B2').api.VerticalAlignment = -4130 # -4108 垂直居中(默认)。 -4160 靠上,-4107 靠下, -4130 自动换行对齐。"""设置单元格的外边框"""
#设置单元格底部框Borders(9),LineStyle=1为直线,Weight=2边框粗细
sht.range('B2').api.Borders(9).LineStyle=1
sht.range('B2').api.Borders(9).Weight=2
#Borders(7)左边框,虚线
sht.range('B2').api.Borders(7).LineStyle=2
sht.range('B2').api.Borders(7).Weight=2
#Borders(8)顶部框,双点划线
sht.range('B2').api.Borders(8).LineStyle=5
sht.range('B2').api.Borders(8).Weight=2
#Borders(10)右边框,点划线
sht.range('B2').api.Borders(10).LineStyle=4
sht.range('B2').api.Borders(10).Weight=2#单元格内Borders(5)从左上角到右下角斜线
sht.range('A2').api.Borders(5).LineStyle=1
sht.range('A2').api.Borders(5).Weight=2
#单元格内Borders(6)从左下角到右上角斜线
sht.range('C2').api.Borders(6).LineStyle=1
sht.range('C2').api.Borders(6).Weight=2"""设置单元格区域的内边框"""
#Borders(11)区域内部垂直边线
sht.range('A3:C5').api.Borders(11).LineStyle=1
sht.range('A3:C5').api.Borders(11).Weight=2
#Borders(12)区域内部水平边线
sht.range('A3:C5').api.Borders(12).LineStyle=1
sht.range('A3:C5').api.Borders(12).Weight=2# 合并单元格 B3 到 C3,注意excel不能最小化,否则会报错
sht.range('B3:C3').api.merge()
sht.range('B3:C3').api.unmerge() # 拆分单元格