1.安装环境
- 确保安装python,检查是否安装python:cmd输入python -V
- 安装pywin32库:python3 -m install pywin32/pip3 install pywin32 -i https://douban.com/pypi
- 使用tasklist | findstr “EXCEL.EXE”检查是否有Excel进程
- 使用taskkill /F /IM EXCEL.EXE 终止全部Excel进程
Excel 对象
- 启动 Excel
- 可视化
- 弹窗
退出
>>> from win32com.client import Dispatch # 倒入win32库中的Dispatch方法>>> xlapp = Dispatch('Excel.Application') # 启动Excel>>> xlapp # 返回Excel对象<COMObject Excel.Application>>>> type(xlapp)<class 'win32com.client.CDispatch'>>>>>>> from win32com.client import DispatchEx>>> xlapp = DispatchEx('Excel.Application') # 单独起一个Excel进程>>> xlapp.Visible=True # 开启可视化>>> xlapp.Visible=False # 关闭可视化>>> xlapp.DisplayAlerts = False # 关闭弹窗>>> xlapp.Application.Quit() # 退出Excel进程
工作簿对象
添加, add
- 打开
- 关闭
- 保存
另存为
>>> wb = xlapp.Workbooks.Add() # 把创建的空白Excel表格变为有名称有显示的表格>>> wb.Count # 查看工作簿数量>>> xlapp.Workbooks.Count # 查看工作簿数量>>> wb.Close() # 把有显示的表格变为空白的表格>>> wb = xlapp.Workbooks.open(r"C:\Users\25569\Desktop\111.xlsx")# 打开Excel>>> wb.SaveAs(r"C:\Users\32075\OneDrive\桌面\222.xlsx")>>> wb.Worksheets.Item('Sheet1').Range('A1').value = 100 # 给sheet1,A1单元格添加内容>>> wb.Worksheets['Sheet1'].Range('A1').value = 1000 # 给sheet1,A1单元格添加内容>>> wb.Worksheets['Sheet1'].Range('A1').value = 10000
打开一个本地文件
xlapp = DispatchEx('Excel.Application') # 创建Excel进程xlapp.Visible=True # 可视化wb = xlapp.Workbooks.open(r"C:\Users\25569\Desktop\111.xlsx")# 打开本地文件
Sheet 页对象
总数量, 及名称
- 获取激活的sheet页
- 激活sheet页
- 使用sheet页
- sheet 名称
- 删除sheet页
- 修改sheet页名
- 添加sheet页
>>> wb.Worksheets.Count # 查找共有几个sheet页1>>> wb.ActiveSheet # 获取当前激活的sheet页<COMObject <unknown>>>>> wb.ActiveSheet.name'Sheet1'>>> wb.ActiveSheet.name = "test2" # 给当前激活的sheet页名称>>> ws = wb.Worksheets("Sheet1")>>> ws = wb.Worksheets["Sheet1"]>>> ws = wb.Worksheets.Item("Sheet1")>>> active_sheet = wb.ActiveSheet>>> wb.worksheets.Add(Before=sheet) # 在当前激活的sheet页前面新增一个sheet页<COMObject Add>>>> wb.Worksheets("Sheet4").Delete() # 删除指定sheet页>>> wb.Worksheets("Sheet2").Select() # 激活指定sheet页>>> wb.Sheets(1).Name # 获取指定位置的sheet页名称'Sheet3'
wb.Worksheets.Count # 查找共有几个sheet页sht = wb.Activesheet # 当前激活的sheet页sht.name # 获取激活的sheet页名称sht.name='test' # 给当前激活的sheet页改名wb.worksheets.Add(Before=sht) # 在当前激活的sheet页前面新增一个sheet页wb.Worksheets("Sheet3").Delete() # 删除某一个sheet页wb.Worksheets("Sheet2").Select() # 激活某一个sheet
添加 sheet 页
- self为Excel对象
sheet_name:新增sheet页名称,如果默认则是None
def add_sheet(self, sheet_name=None):'''添加新页,页名可以自定义'''sheet = self.WorkSheets.Add()sheet.Name = sheet_name if sheet_name else sheet.Namereturn sheet
获取所有 sheet 页名称
def get_sheet_names(self):name_list = []a = self.Sheets.Countfor i in range(1,a+1):name_list.append(self.Sheets(i).name)return sheet
range对象
指定区域
单元格
- 获取单元格的值
- 设置单元格的值
- 设置单元格颜色
- 设置单元格字体
- 清空单元格
- 列
- 行
- 区域
- 已使用区域
总行数
- 方法一
- 方法二
简单操作
- 复制
- 粘贴
- 拷贝
- 合并单元格
筛选单元格
>>> sht = wb.Worksheets("Sheet1") # 获取sheet页名称为Sheet1的sheet对象>>> sht.Cells(1,"A").value # 读取指定sheet页单元格内容>>> sht.Cells(1,1).value111.0>>> sht.Cells(1,1).text # 读取指定单元格文本'111'>>> sht.Columns("A:A").value # 获取列内容>>> sht.Rows(1).value # 获取行内容>>> sht.Range("A1:B2").Value # 读取区域内容((111.0, 111.0), (111.0, None))>>> sht.Range("A1:B2").Address # 获取区域地址'$A$1:$B$2'>>> sht.Rows(1).value = ["A","B"]>>> sht.Columns.Count>>> sht.Rows.Count>>> sht.UsedRange.Value # 获取已使用区域内容((111.0, 111.0, 111.0), (111.0, None, None), (111.0, None, None))>>> sht.UsedRange.Rows.Count # 获取总行数3>>> sht.UsedRange.Columns.Count # 获取总列数16384>>> sht.Range("A65536").End(-4162).Row # 获取总行数3>>> sht.Range("A1:B2")<COMObject Range>>>> sht.Range("D1").Height # 查询单元格行高>>> sht.Range("D1").Interior.ColorIndex = 3 # 给D1单元格设置颜色索引为3的颜色
sht=wb.ActiveSheet # 当前激活的sheet页sht.Cells(1,1).Value # 获取单元格内容如果是数字则是1.0(1,1表示为第一行第一列)sht.Cells(1,A).text # 获取单元格文本
通过 rgb设置单元格颜色
def rgb_to_hex(rgb):'''ws.Cells(1, i).Interior.color uses bgr in hex'''bgr = (rgb[2], rgb[1], rgb[0])strValue = '%02x%02x%02x' % bgr# print(strValue)iValue = int(strValue, 16)return iValuews.Cells(1, 1).Interior.color = rgb_to_hex((218, 36, 238))
>>> sht.Range("D1").Font.Name = "宋体" # 设置单元格字体>>> sht.Range("D1").Font.Name # 获取单元格字体类型'宋体'>>> sht.Range("D1").ClearFormats() # 清除样式,恢复默认True>>> sht.Range("D1").ClearContents() # 清空内容True>>> sht.Range("D1").Clear() # 清空内容和样式Truesht.Range("A1").value=1 # 给单元格赋值
操作
拷贝, 粘贴
>>> sht.Range("A1:B2").Copy()True>>> sht.Range("D1").Paste>>> sht.Range("D1").PasteSpecial()True>>> sht.Range("A1:B2").Select()
合并单元格
# 判断是否合并单元格>>> sht.Range("A1").MergeCellsFalse>>> sht.Range("A1:A2").Merge()>>> sht.Range("A1:A2").unMerge()
常见用法
from win32com.client import Dispatchdef main(args):xlapp = Dispatch("Excel.Application")xlapp.Visible=Truewb = xlapp.workbooks.open(r"C:\Users\25569\Desktop\222.xlsx") # workbooks工作簿对象# shts = wb.worksheets # worksheets sheets对象;获取所有的sheet页对象# for sht in shts:# print(sht.name)# sht = wb.Activesheet # 获取点前激活的sheet页# print(sht.name)# Range = sht.Range("A1:C3") # 获取区域的内容# print(Range.value)# row = sht.Rows(1) # 获取行内容# print(row.value)# column = sht.Columns("A") # 获取列内容# print(column.value)# cell = sht.Cells(1,1) # 获取单元格内容# print(cell.value)# cell.value="测试" # 修改单元格内容shts = wb.worksheets # worksheets sheets对象;获取所有的sheet页对象for sht in shts: # 在某个sheet页前面增加一个sheet页if sht.name == "1":new_sht = shts.Add()sht.Select()new_sht.name = "测试"break
