Python基础 - 办公自动化

Python基础 - 办公自动化

openpyxl 库不兼容 office 2007 以前的版本,如果遇到了,可以使用 xlwt / xlrd / xlutils 进行读写。

官文网站:https://pypi.org/

1.自动化表格处理

  • 加载工作簿

    openpyxl.load_workbook(文件路径)

  • 获取工作表

    1. 变量名.active
    2. 变量名[‘工作表名’] # type: worksheet
  • 获取工作表属性

    1. sheet.max_row
    2. sheet.max_column
    3. 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(保存路径)

  • 单元格格式改写

    1. 字体改写
    header_style = xlwt.XFStyle()
    pattern = xlwt.Pattern()
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    # 0 - ⿊⾊、1 - ⽩⾊、2 - 红⾊、3 - 绿⾊、4 - 蓝⾊、5 - ⻩⾊、6 - 粉⾊、7 - ⻘⾊
    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 = '华⽂楷体'
    # 字体⼤⼩(20是基准单位,18表示18px)
    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内置函数动态给对象指定的属性赋值
     setattr(borders, position, xlwt.Borders.DASHED)
     setattr(borders, color, 5)
    header_style.borders = borders
    
    1. 单元格格式改写
    # 设置⾏⾼为40px
    sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
    titles = ('姓名', '语⽂', '数学', '英语')
    for index, title in enumerate(titles):
     # 设置列宽为200px
     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_SSL对象
smtp_obj = smtplib.SMTP_SSL(host='smtp.126.com', port=465)
# 1. 登录授权
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)

# 2. 发送邮件
smtp_obj.sendmail(
    from_addr='jackfrued@126.com',
    to_addrs=['957658@qq.com', 'luohao@1000phone.com'],
    msg=m_part.as_string()
)
# 3. 结束会话
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,里面所有字节(包括常见可打印字符)也编码了!

    编号字符编号字符编号字符
    0A16Q32g48w
    1B17R33h49x
    2C18S34i50y
    3D19T35j51z
    4E20U36k520
    5F21V37l531
    6G22W38m542
    7H23X39n553
    8I24Y40o564
    9J25Z41p575
    10K26a42q586
    11L27b43r597
    12M28c44s608
    13N29d45t619
    14O30e46u62+
    15P31f47v63/
  • Base64 编码转换原理

    转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

    如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

  • 百分号编码

    使用这种编码的目的是为了传输, 类似UTF8的用途。百分号编码中分为保留字符和非保留字符, 很明显, 所谓的保留字符就是有其特殊用途的, 编码时需要转换的; 非保留字符就是可以直接被使用的, 编码时不需要转换的。

    非保留字符是很明确的, 所以在编码时, 只要判断哪些是非保留的, 剩下的就是保留的(需要转换的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值