Python基础 - 办公自动化
openpyxl 库不兼容 office 2007 以前的版本,如果遇到了,可以使用 xlwt / xlrd / xlutils 进行读写。
官文网站:https://pypi.org/
1.自动化表格处理
-
加载工作簿 openpyxl.load_workbook(文件路径)
-
获取工作表
- 变量名.active
- 变量名[‘工作表名’] # type: worksheet
-
获取工作表属性
- sheet.max_row
- sheet.max_column
- sheet.dimensions
-
遍历单元格获取单元格的值 for row in (2, sheet.max_row + 1):
for col in (1, sheet.max_column + 1):
value = sheet.cell(row, clo).value
-
sheet[‘指定单元格’] = 值或函数
-
变量名.save(保存路径)
-
单元格格式改写
- 字体改写
header_style = xlwt.XFStyle()
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = 5
header_style.pattern = pattern
titles = ('姓名', '语?', '数学', '英语')
for index, title in enumerate(titles):
sheet.write(0, index, title, header_style)
font = xlwt.Font()
font.name = '华?楷体'
font.height = 20 * 18
font.bold = True
font.italic = False
font.colour_index = 1
header_style.font = font
align = xlwt.Alignment()
align.vert = xlwt.Alignment.VERT_CENTER
align.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = align
borders = xlwt.Borders()
props = (
('top', 'top_colour'), ('right', 'right_colour'),
('bottom', 'bottom_colour'), ('left', 'left_colour')
)
for position, color in props:
setattr(borders, position, xlwt.Borders.DASHED)
setattr(borders, color, 5)
header_style.borders = borders
- 单元格格式改写
sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
titles = ('姓名', '语?', '数学', '英语')
for index, title in enumerate(titles):
sheet.col(index).width = 20 * 200
sheet.write(0, index, title, header_style)
2. 自动化邮件处理
在日常办公过程中,不可避免的是邮件交流,在Python的标准库中为我们提供了强大的邮件处理模块,不仅可以自动发送文本邮件,同时还具有定时发送、添加附件等能力。
在发送邮件时,需要通过 SMTP 协议与邮件服务器进行网络通信实现发送邮件的目标。在Python标准库中对SMTP进行可封装,我们只用通过创建对象,给对象发消息就可以实现。
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
smtp_obj = smtplib.SMTP_SSL(host='smtp.126.com', port=465)
smtp_obj.login('jackfrued@126.com', 'PYNTEOLFBGAVJJKS')
m_part = MIMEMultipart()
m_part['From'] = 'jackfrued@126.com'
m_part['To'] = '957658@qq.com;luohao@1000phone.com'
m_part['Cc'] = 'sasak@126.com'
m_part['Subject'] = 'Python办公自动化学习内容'
content = """
hello! my friend!
"""
mime_text = MIMEText(content, 'plain', 'utf-8')
m_part.attach(mime_text)
with open('resources/用Python发送邮件和短信.pdf', 'rb') as file:
pdf_file = MIMEText(file.read(), 'base64', 'utf-8')
pdf_file['content-type'] = 'application/pdf'
pdf_file['content-disposition'] = 'attachment; filename="Python-email-sms.pdf"'
m_part.attach(pdf_file)
with open('resources/阿里巴巴2020年股票数据.xlsx', 'rb') as file:
excel_file = MIMEText(file.read(), 'base64', 'utf-8')
excel_file['content-type'] = 'application/vnd.ms-excel'
excel_file['content-disposition'] = 'attachment; filename="alibaba-stock.xlsx"'
m_part.attach(excel_file)
smtp_obj.sendmail(
from_addr='jackfrued@126.com',
to_addrs=['957658@qq.com', 'luohao@1000phone.com'],
msg=m_part.as_string()
)
smtp_obj.quit()
-
Base64 编码 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。 它是一种将二进制编码转换为可打印字符一种。它是MIME编码里面非常常见一种可逆转换二进制方法!现常用于电子邮件中,邮件类型声明如:Content-Transfer-Encoding: base64 ! 由于2的6次方等于64,所以每6个位为一个单元,对应某个可打印字符。三个字节有24个位元,可以对应4个Base64单元,因此3个字节需要用4个base64单元来表示!如:MaN对应base64是:TW Fu ! 这64个可打印字符a-z,A-Z,0-9就占62字符,剩下2个字符不同系统可能使用不同,经常是:“+/”。base64编码后,文档大小为原先的4/3,里面所有字节(包括常见可打印字符)也编码了!
编号 | 字符 | | 编号 | 字符 | | 编号 | 字符 |
---|
0 | A | 16 | Q | 32 | g | 48 | w | 1 | B | 17 | R | 33 | h | 49 | x | 2 | C | 18 | S | 34 | i | 50 | y | 3 | D | 19 | T | 35 | j | 51 | z | 4 | E | 20 | U | 36 | k | 52 | 0 | 5 | F | 21 | V | 37 | l | 53 | 1 | 6 | G | 22 | W | 38 | m | 54 | 2 | 7 | H | 23 | X | 39 | n | 55 | 3 | 8 | I | 24 | Y | 40 | o | 56 | 4 | 9 | J | 25 | Z | 41 | p | 57 | 5 | 10 | K | 26 | a | 42 | q | 58 | 6 | 11 | L | 27 | b | 43 | r | 59 | 7 | 12 | M | 28 | c | 44 | s | 60 | 8 | 13 | N | 29 | d | 45 | t | 61 | 9 | 14 | O | 30 | e | 46 | u | 62 | + | 15 | P | 31 | f | 47 | v | 63 | / |
-
Base64 编码转换原理 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。 如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。 -
百分号编码 使用这种编码的目的是为了传输, 类似UTF8的用途。百分号编码中分为保留字符和非保留字符, 很明显, 所谓的保留字符就是有其特殊用途的, 编码时需要转换的; 非保留字符就是可以直接被使用的, 编码时不需要转换的。 非保留字符是很明确的, 所以在编码时, 只要判断哪些是非保留的, 剩下的就是保留的(需要转换的)
|