办公自动化的一些简单操作


前言

其实Python作为一个解释性的语言却能发展的这么迅速,与其强大的库有密不可分的联系,特别是现在的人工智能的大火,基本上大家用的应该都是Python语言吧。另外,由于库的不断丰富,导致运用Python的地方的确蛮多的,而且,在这些领域用的还十分不错,算是一大形势吧。然后我想在弄一点关于办公自动化的代码,其实这个应用前景还是特别大的,想很多广告都是诸如学好Python,我只要半个小时完成工作,其他时间都在喝咖啡,刷视频;而别人工作一天,加班加点还没做完。所以想在这记录一点自己之前学的内容,算是再重温一下。


一.Excel自动化操作

1.2 读

# 读取excel表格
import xlrd 

data = xlrd.open_workbook("../data/测体温.xls")

"""
    获取工作簿(book)中的工作表sheet
    以下三个函数会返回一个xlrd.sheet.sheet()对象
"""

# # 通过索引顺序获取
# table = data.sheets()[0]
# # 通过索引顺序获取
# table = data.sheet_by_index(0)
# 通过名称获取
table = data.sheet_by_name("Sheet1")

# 返回book中所有工作表的名字
names = data.sheet_names()
print(names)

# ['Sheet1', 'Sheet2', 'Sheet3']


"""
    工作表中的行/列的操作
"""
# 获取该sheet中的有效行数
nrows = table.nrows
print(nrows)
row_index, col_index = 0, 0

# 获取某行信息
# print(table.orw(row_index))
print(table.row_slice(row_index))

# 获取某列信息
# print(table.col(col_index))
print(table.col_slice(col_index))


# 返回某行的数据类型列表
print(table.row_types(row_index, start_colx=0, end_colx=None))
print(table.row_types(1, start_colx=0, end_colx=None))

# 返回某行的数值
print(table.row_values(row_index, start_colx=0, end_colx=None))

# 返回某行的有效单元格长度
print(table.row_len(row_index))

1.2 写

import xlwt

# 创建一个workbook 设置编码
workbook = xlwt.Workbook(encoding="utf-8")
# 创建一个worksheet
worksheet = workbook.add_sheet("国贸写字楼")

# 写入excel,参数对应 行 , 列,值
worksheet.write(0, 0, label="人员")
# 保存文件
workbook.save("../data/测体温2.xls")


""" 设置字体样式 """
# 初始化样式
style = xlwt.XFStyle()
# 为样式创建字体
font = xlwt.Font()
font.name = "Times New Roman"
# 加粗
font.bold = True
# 下划线
font.underline = True
# 斜体字
font.italic = True
# 修改样式
style.font = font
worksheet.write(0, 1, "体温", style)
workbook.save("../data/测体温2.xls")


""" 设置单元格宽度 """
# worksheet = workbook.add_sheet("世贸天阶")
worksheet.write(0, 2, "时间")
# 设置单元格宽度
worksheet.col(0).width = 3333
workbook.save("../data/测体温2.xls")


""" 添加日期到单元格 """
import datetime

# 获取样式
style = xlwt.XFStyle()
# Other options: D-MMM-YY, D-MMM, MMM-YY,h:mm:ss, h:mm, M/D/YY h:mm,
style.num_format_str = "M/D/YY"
worksheet.write(1, 2, datetime.datetime.now(), style)
workbook.save("../data/测体温2.xls")


""" 想单元格添加一个公式 """
worksheet.write(1, 1, 37.4)
worksheet.write(2, 1, 36.5)

# 求两个单元格的平均值
worksheet.write(3, 1, xlwt.Formula("AVERAGE(B2,B3)"))
workbook.save("../data/测体温2.xls")


""" 向单元格添加一个链接 """
worksheet.write(1, 3, xlwt.Formula('HYPERLINK("http://www/baidu.com"; "baidu")'))
workbook.save("../data/测体温2.xls")


""" 合并列和行 """
# write_merge(行开始,行结束, 列开始,列结束,“数据内容”)
# 创建字体
font = xlwt.Font()
# 加粗
font.bold = True
stylle = xlwt.XFStyle()
style.font = font
worksheet.write_merge(4,5,0,2,"备注:需要检查是否佩戴口罩", style)
workbook.save("../data/测体温2.xls")


""" 给单元格添加边框和背景色 """
# 边框样式
borders = xlwt.Borders()
borders.left = xlwt.Borders.DASHED
borders.right = xlwt.Borders.DASHED
borders.top = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DASHED

borders.left_colour = 0x40
borders.right_colour = 0x40
borders.top_colour = 0x40
borders.bottom_colour = 0x40

# 创建样式
style = xlwt.XFStyle()
style.borders = borders
worksheet.write(1, 0, "张飞", style)
worksheet.write(2, 0, "关羽", style)
workbook.save("../data/测体温2.xls")

二. Word自动化操作

from docx import Document
from docx.shared import Inches

# 空白文档
document = Document()
# document = Document("./test.docx")  # 打开原有文档
paragraph = document.add_paragraph("基于Python的办公自动化处理")
paragraph = document.add_paragraph("段落1:word自动化")

document.add_section()  # 添加新章节
paragraph = document.add_paragraph("章节2-1")
document.add_section()  # 添加新章节
paragraph = document.add_paragraph("章节3-1")

sections = document.sections  # 返回所有章节引用的对象
print('章节数 =', len(sections))  # 返回章节总数


# 得到指定section
section = sections[0]  # 返回指定章节的对象
section = document.sections[-1]  # 返回文档的最后一个章节

# 得到section的信息,1英寸=914400像素
new_height = section.page_height
new_width = section.page_width
print("Section页面高 = {}, Section页面宽 = {}".format(new_height, new_width))
print("左边距={}, 右边距={}".format(section.header_distance, section.footer_distance))

# 添加标题
document.add_heading("标题:楼宇进出人员名单",level=0)

# 添加表格
table = document.add_table(rows=3,cols=3)
# 返回行对象
row = table.rows[0]

# 给行对象的第n个单元格赋值
row.cells[0].text = "姓名"
row.cells[1].text = "温度"
row.cells[2].text = "时间"

# 返回表格的单元格对象,并赋值
cell = table.cell(1, 0)
cell.text = "张飞"
cell = table.cell(2, 0)
cell.text = "关羽"

# 添加图片--添加的图片以原大小显示
document.add_picture("../imgs/word自动化.jpg")

# 保存文件 (最好每次都操作,以免出现不必要的错误)
document.save("../data/test.docx")

三. PDF自动化

3.1 提取完整表格

import pdfplumber  # 主要是用来提取表格
import pandas as pd

filename = "../data/tangmumao.pdf"
with pdfplumber.open(filename) as pdf:
    # 创建一个空的DataFrame,然后再添加数据
    df = pd.DataFrame(columns=["ID", "企业名称"])
    for page in pdf.pages:
        # 
        text = page.extract_text()  # 提取文字
        table = page.extract_tables()  # 提取表格
        
        for t in table:
            # 得到的table是嵌套list类型,转化成DataFrame类型,方便后续处理
            # 每页的table
            temp_df = pd.DataFrame(t[0:], columns=["ID", "企业名称"])
            print(temp_df)
            
            df = df.append(temp_df, ignore_index=True)
            # df = df.merge([df, temp_df])
            
# 保存文件
df.to_csv("../data/认真名单.csv", index=False)

3.2 PDF的旋转

import PyPDF2  # 主要是用于PDF的旋转,合并和拆分等大的操作

# 对PDF文档进行旋转
def PDFrotate(origFileName, newFileName, rotation):
    pdfFile = open(origFileName, "rb")  # 打开文件,以二进制读取方式
    pdfReader = PyPDF2.PdfFileReader(pdfFile)  # 读取文件
    pdfWrite = PyPDF2.PdfFileWriter()  # 文件写入函数
    
    # 对每一页进行旋转
    for page in range(pdfReader.numPages):  # 对每一页进行操作
        pageObj = pdfReader.getPage(page)  # 页数读取
        pageObj.rotateClockwise(rotation)  # 页面的角度旋转
        pdfWrite.addPage(pageObj)  # 内容的重新写入
        
    # 保存文件
    newFile = open(newFileName, "wb")  # 将新文件写入新名字的pdf
    pdfWrite.write(newFile)  # 将内容写入
    pdfFile.close()  # 关闭原来的文件
    newFile.close()  # 关闭新生成的文件

# 写上需要旋转的PDF,旋转后的PDF的名字,旋转的角度
PDFrotate("../data/tangmumao.pdf", "../data/tangmumao_rotate.pdf", 90)

四. Email自动化

  • 使用Python实现自动化邮件发送,可以让你摆脱繁琐的重复性业务,可以节省非常多的时间。

  • Python有两个内置库:smtplib和email,能够实现邮件功能,smtplib库负责发送邮件,email库负责构造邮件格式和内容。

  • 邮件发送需要遵守SMTP协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

# 1、先导入相关的库和方法
import smtplib
import email

from email.mime.text import MIMEText  # 负责构造文本
from email.mime.image import MIMEImage  # 负责构造图片
from email.mime.multipart import MIMEMultipart  # 负责将多个对象集合起来
from email.header import Header


# 2、设置邮箱域名、发件人邮箱、邮箱授权码、收件人邮箱

# SMTP服务器,这里使用163邮箱
mail_host = "smtp.163.com"
# 发件人邮箱
mail_sender = "发件人邮箱@163.com"
# 这是邮箱授权码,不是邮箱密码.
mail_license = "邮箱授权码"
# 收件人邮箱,可以为多个收件人
mail_receivers = ["收件人邮箱1","收件人邮箱2"]


# 3、构建MIMEMultipart对象代表邮件本身,可以往里面添加文本、图片、附件等

mm = MIMEMultipart('related')


# 4、设置邮件头部内容

# 邮件主题
subject_content = """那个男孩对我说,有事情找你。"""
# 设置发送者,注意严格遵守格式,里面邮箱为发件人邮箱
mm["From"] = "sender_name<发件人邮箱>"
# 设置接受者,注意严格遵守格式,里面邮箱为接受者邮箱
mm["To"] = "receiver_1_name<接受者邮箱1>,receiver_2_name<接受者邮箱2>"
# 设置邮件主题
mm["Subject"] = Header(subject_content, 'utf-8')


# 5、添加正文文本

# 邮件正文内容
body_content = """土豆土豆,我是地瓜,收到请回答!"""
# 构造文本,参数1:正文内容,参数2:文本格式,参数3:编码方式
message_text = MIMEText(body_content,"plain","utf-8")
# 向MIMEMultipart对象中添加文本对象
mm.attach(message_text)


# 6、添加图片

# 二进制读取图片
image_data = open('tom.jpg','rb')
# 设置读取获取的二进制数据
message_image = MIMEImage(image_data.read())
# 关闭刚才打开的文件
image_data.close()
# 添加图片文件到邮件信息当中去
mm.attach(message_image)


# 7、添加附件(excel表格)

# 构造附件
atta = MIMEText(open('员工信息.xlsx', 'rb').read(), 'base64', 'utf-8')
# 设置附件信息
atta["Content-Disposition"] = 'attachment; filename="员工信息.xlsx"'
# 添加附件到邮件信息当中去
mm.attach(atta)


# 8、发送邮件

# 创建SMTP对象
stp = smtplib.SMTP()
# 设置发件人邮箱的域名和端口,端口地址为25
stp.connect(mail_host, 25)  
# set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
stp.set_debuglevel(1)
# 登录邮箱,传递参数1:邮箱地址,参数2:邮箱授权码
stp.login(mail_sender,mail_license)
# 发送邮件,传递参数1:发件人邮箱地址,参数2:收件人邮箱地址,参数3:把邮件内容格式改为str
stp.sendmail(mail_sender, mail_receivers, mm.as_string())
print("邮件发送成功")
# 关闭SMTP对象
stp.quit()

五. 实战:爬取一个睡前小故事并发送给指定的人

# 1. 返回url的内容
import requests

def getHTMLText(url):
    headers = {'User-Agent':'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',}
    try:
        r = requests.get(url, headers=headers, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "爬取失败"

# 2.选取一个随机的爬取对象
import random

page_num = random.randint(1,30)
if page_num==1:
    url='http://www.tom61.com/ertongwenxue/shuiqiangushi/index.html'
else:
    url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index_'+str(page_num)+'.html'
html=getHTMLText(url)

# 3. 获取爬取的链接
import bs4

base_url = 'http://www.tom61.com/'
soup = bs4.BeautifulSoup(html,'lxml')
txt_box = soup.find('dl',attrs={'class':'txt_box'})
a_tags = txt_box.find_all('a')
urllist = []

for link in a_tags:
    urllist.append(base_url+link.get('href'))

# 4. 随机选取一个小故事
story_item = random.choice(urllist)

# 5. 获取网页的内容并解析放在content里
html = getHTMLText(story_item)
text = []
soup = bs4.BeautifulSoup(html,'lxml')
tags = soup.find('div',class_='t_news_txt')

for i in tags.findAll('p'):
    text.append(i.text)

contents =  "\n".join(text)

# 6. 以contents为内容发送邮件给女盆友就大功告成!
import zmail

# 使用邮件账户名和邮箱的授权码登录服务器
server = zmail.server('邮件账户名', '邮箱的授权码')
mail = {
    'subject': '睡前小故事',  # 邮件的标题
    'content_text': contents,  # 邮件的文字内容
}

# 发送邮件
ret = server.send_mail(['接受者的邮箱'], mail)
print('发送结果:', ret)

总结

应该全是干货,可以直接那来用的那种,特别是最后一个小案例,比较好用。当然了,我也在改进,能否在智能一点,一起加油!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值