python: win32com 自动化办公文章合集

Excel的基础操作

1. 打开、保存/另存为、关闭

import pythoncom
from win32com.client import DispatchEx

pythoncom.CoInitialize()
xlApp = DispatchEx('Excel.Application')
xlApp.Visible = True # 可视,True or False
xlApp.DisplayAlerts = False # 弹出警告

wb = xlApp.Workbooks.Open(io,False) # io:excel文件地址
# 操作完成后

# 保存
wb.Save() 
# 另存为
wb.SaveAs(io, 51) # io地址的文件,51表示是xlsx的文件
wb.Close() # 关闭文件
xlApp.Quit() # 关闭excel程序
pythoncom.CoUninitialize() # 关闭线程

2. 打开、复制Sheet

# 使用WorkSheet
ws = wb.WorkSheet(1) # 选中第一张工作表
ws = wb.WorkSheet("Sheet1") # 选中名为“Sheet1”的工作表
# 使用Sheets
ws = wb.Sheets(1)
ws = wb.Sheets('Sheet1')

# 获取sheet的名字
ws.name 

# 跨文件复制Sheet
wb1 = xlApp.Open('文件1.xlsx')
wb2 = xlApp.Open('文件2.xlsx')
 
ws1 = wb1.WorkSheets(1)
ws2 = wb2.WorkSheets(1)
ws1.Copy(None,ws2)
# 实现了把第一个工作簿中的第一个工作表复制到第二个工作簿中,
# 位置在的第一个工作表后

知乎:中文编程,python控制Excel实现跨文件复制Sheet.

3. 选中单元格、区域、行、列

ws.Cells(1,1) # 根据行号和列号选中单元格    # Cells可大写可小写
 
ws.Range(ws.Cells(1,1),ws.Cells(3,3))     # Range必须要大写
ws.Range('A1:D8')
 
ws.Rows(1)                                # Rows可大写可小写
ws.Rows('1:2')
 
ws.Columns(1)                             # Columns可大写可小写
ws.Columns('A')
# ws.Columns('1:2') # 不可以
ws.Columns('A:B')

4. 单元格字体

ws.Cells(i,j).Font.name # 字体名称属性,可读写
ws.Cells(i,j).Font.Bold # 字体加粗属性,可读写

5.单元格数字格式

numformat = '#,##0'
numformat = '#,##0.00'
numformat = '0.00%'
# 通过NumberFormatLocal
ws.Cells(i,j).NumberFormatLocal = numformat
# 通过NumberFormat 
ws.Cells(i,j).NumberFormat = numformat

6. 单元格填充

Shift参数参考:XlInsertShiftDirection 枚举 (Excel) | Microsoft Docs
xlPatternNone = -4142 : 无图案
xlPatternDown = -4121:从左上角到右下角的深色对角线

ws.Range("A1:A11").Interior.Pattern = -4142 # 无填充
ws.Cells(i,j).Interior.color = 14277081.0 # 填充相应颜色

7.自动填充

Type参数可取值参考链接:XlAutoFillType 枚举 (Excel) | Microsoft Docs
常用:0,填充值与格式;3,填充格式。

ws.Range("A1").AutoFill( Destination = ws.Range("A1:A10"), Type=0)
# 根据第1列第1行的单元格,填充第一列前10行的值与格式

如果destination的区域没有包括填充模板,会报错:
(-2147352567, ‘发生意外。’, (0, None, None, None, 0, -2147024809), None)

8.插入复制的行

Shift参数参考:XlInsertShiftDirection 枚举 (Excel) | Microsoft Docs
-4121:向下移动单元格;-4161:向右移动单元格

ws.Rows(17).Copy() # 如果没有复制行,则插入空行
ws.Rows(18).Insert(Shift=-4121)
 
copy = ws.Range("A13:S14").Rows.Copy()
ws.Rows(3).Insert(copy)

9.隐藏行

ws.Range("B19,B23,B26").EntireRow.Hideen = True

10.清空内容

ws.Range("C3:S6,C8:S10,C12:S13").ClearContents()

11.获取使用的行数和列数

range_used = sht.UsedRange
max_row = range_used.Rows.Count
max_col = range_used.Columns.Count

python+openpyxl 获取最大行数,不是真正想获取的行数,导致替换时,报”NoneType’ object has no attribute ‘find’

12.冻结窗格

重点在于xlApp.ActiveWindow

ws.Cells(2,2).Select() # 选中激活
xlApp.ActiveWindow.FreezePanes = True

13.添加数据条

这部分内容完全是根据录制的VBA代码来写的

Selection = ws.Range('A2:A18')
Selection.Select()
Selection.FormatConditions.AddDatabar()
Selection.FormatConditions(Selection.FormatConditions.Count).SetFistPriority()
Selection.FormatConditions(1).ShowValue = True # 显示数字
Selection.FormatConditions(1).MinPoint.Modify(newtype=0, newvalue=0) # 设置最小值类型(type)为数字(0),值为1
Selection.FormatConditions(1).MaxPoint.Modify(newtype=0, newvalue=1) # 设置最小值类型(type)为数字(0),值为1
Selection.FormatConditions(1).BarColor.Color = 13012579 # 数据条颜色
Selection.FormatConditions(1).BarColor.TintAndShade = 0 # 色度
Selection.FormatConditions(1).BarFillType = 1 # 填充类型:渐变填充(1)
Selection.FormatConditions(1).Direction = -5002 # 条形图方向
# 数据条边框
Selection.FormatConditions(1).BarBorder.Type = 1 # xlDataBarBorderSolid
Selection.FormatConditions(1).BarBorder.Color.ThemeColor = 5
Selection.FormatConditions(1).BarBorder.Color.TintAndShade = 0
# 负值和坐标轴,一般不设置,默认
Selection.FormatConditions(1).NegativeBarFormat.ColorType = 0 # 负值颜色
Selection.FormatConditions(1).NegativeBarFormat.BorderColorType = 0 
Selection.FormatConditions(1).AxisPosition = 0 # 坐标轴
Selection.FormatConditions(1).AxisColor.Color = 0
Selection.FormatConditions(1).AxisColor.TintAndShade = 0.0
Selection.FormatConditions(1).NegativeBarFormat.Color.Color = 255
Selection.FormatConditions(1).NegativeBarFormat.Color.TintAndShade = 0

参考链接

EXCEL:VBA的对象
pywin32+excel(一)——Python使用win32com/pywin32操作excel
​​​​​​win32com模块的使用 - Z-J-H - 博客园
python使用win32com的心得 - 小西红柿 - 博客园
巧用python win32com模块操作excel文件
win32com操作大全(含常见错误解决办法)
【保存版】win32comでExcel操作をする方法【Python】 | karochoatec.com

多线程问题

Python多线程使用win32com注意事项 ,避免:(-2147221008, ‘尚未调用 CoInitialize。’, None, None)_六十耳顺的博客-CSDN博客
Python多线程使用win32com注意事项 - 杨仕航的博客

Lotus

email - Send mail in Lotus Notes using python - Stack Overflow
python发送 IBM lotus Notes 邮件 - 夏主 - 博客园

邮件

python通过imap批量删除指定发件人的邮件_boyue6973的博客-CSDN博客
​​​​​​Python 收邮件、读邮件、标记已读和删除邮件-逍遥峡谷
Python自动化读取邮件基础代码讲解 - 云+社区 - 腾讯云

你可能感兴趣的:(python,自动化)