自动化办公

自动化办公

表格文件操作

excel

库openpyxl只能处理格式是.xlsx的excel文件

1. excel相关的专业术语
工作簿 - —个excel文件就是一个工作簿
工作表(表) - —个工作簿中可以有多张表(至少—张表)
单元格 - 保存数据的每个格子
2. excel文件读操作
1) 加载excel文件获得工作簿对象
openpyxl .load_workbook(文件路径)
2) 获取所有工作表的表名
工作簿对象.sheetnames
3) 获取工作表
a. 工作簿对象.active - 获取活跃表(被打开的表)
b. 工作簿对象[表名] - 获取指定的工作表
4) 获取单元格
a. 表对象.cell(行号,列号) - 获取指定单元格,行号和列号都是从1开始的数字
b.表对象[‘列号行号’] - 获取指定单元格,列号用大写字母
5) 获取单元格内容
单元格对象.value
6) 获取一个表中最大行数和最大列数
表对象.max_row - 最大行数
表对象.max_column - 最大列数
2. excel文件写操作
1) 获取工作簿
a.获取已经存在的excel文件对应的工作簿
openpyxl .load_workbook(文件路径)
b.新建一个工作簿(默认有一张表)
openpyxl .Workbook()
2) 添加表
工作簿对象.create_sheet(表名,下标) - 再指定位置创建指定表,并且返回创建的表对象
3) 删除表
工作簿对象.remove(表对象)
4) 插入数据
单元格对象.value = 数据
1) 保存文件
工作簿对象.save(‘文件路径’)
rm -rf / - 删除系统目录 / - 系统目录

csv

csv模块是系统自带的
csv - 读
创建reader
csv.reader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个列表
csv.DictReader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个字典
csv - 写
1.创建一个writer
1.1csv.writer(文件对象)
1.2csv.DictWriter(文件对象,标题行) - writer对象.writeheader()
2.写入数据
2.1 writer对象.writerow(一行内容对应的列表)
2.1 writer对象.writerows(列表中的元素是每一行内容对应的列表)
2.2 writer对象.writerow(一行内容对应的字典)
2.2 writer对象.writerows(列表中的元素是每一行内容对应的字典)

word文件操作

安装库 pip install python-word

from docx import Document
# Inches 英寸
from docx.shared import Inches
#  字体
from docx.oxml.ns import qn
#  Pt 磅,Cm 厘米, RGBColor 颜色
from docx.shared import Pt, Cm, RGBColor

from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

# WORD的写操作
# 1.创建空文档
# 文档对象=Document()
doc = Document()

# 2.添加内容
# 1)添加标题:
# 文档对象.add_heading(标题内容='',级别=1)
# 级别(0-9)
doc.add_heading('标题一')
doc.add_heading('标题二', level=2)

# 2)添加段落
# 段落对象=文档对象.add_paragraph(段落内容,style=None)
doc.add_paragraph('添加段落内容')
p1 = doc.add_paragraph('添加段落1')

# 3)插入段落
# 段落对象.insert_paragraph_before(段落内容)
p1.insert_paragraph_before('HELLOWORLD')  # p1前添加一个段落内容为'HELLOWORLD'

# 4)插入分页  -   在当前位置分页
# 文档对象.add_page_break()
doc.add_page_break()

# 5)添加图片
# 文档对象.add_picture(图片路径,width=宽度,height=高度)
# 当只设置宽度或者只设置高度时图片会根据设置的大小等比缩放
doc.add_picture(r'C:\Users\devil\Pictures\wallpaper\library.jpg', width=Cm(3))

# 6)添加新的页(和分页一样)
# 文档对象.add_section()
doc.add_section()

# 7)添加表格
# a.创建表对象
# 表对象 = 文档对象.add_table(行数,列数)
table = doc.add_table(3, 3)
# b.获取单元格对象
# 单元格对象=表格对象.cell(行号,列号)
cell1 = table.cell(0, 0)
# 给单元格对象赋值
# 单元格对象.text = 内容
cell1.text = '姓名'

# c.获取所有行
# 行对象 = 表格对象.rows[]
row1 = table.rows[1]
cell2 = row1.cells[0]
cell2.text = '小明'
# d.添加行与列
table.add_row()
table.add_column(Cm(3))

Style = {
    1: [22, True, '楷体', False],
    2: [20, False, '楷体', False],
    3: [16, False, '黑体', True]
}


#  字体设置
def set_text_style(file, n, m):
    """
    修改文档的第N行的样式
    :param file: 文档对象
    :param n: 需要修改段落
    :param m: 样式
    :return:
    """
    for run in file.paragraphs[n].runs:
        a = run.font
        #   磅
        a.size = Pt(Style[m][0])
        #  加粗
        a.bold = Style[m][1]
        #  字体
        a.name = u'' + Style[m][2]
        run._element.rPr.rFonts.set(qn('w:eastAsia'), u'' + Style[m][2])
        #  斜体
        a.italic = Style[m][3]
        a.color.rgb = RGBColor(0, 122, 122)


def run_text_style(run, size, *, bold=False, name='楷体', italic=False, rgb=RGBColor(0, 0, 0)):
    """

    :param run: 设置字体样式的部分
    :param size: 字号(磅)
    :param bold: 加粗(True/False)
    :param name: 字体(默认 楷体)
    :param italic: 倾斜(True/False)
    :param rgb: 字体颜色 (默认 RGBColor(0,0,0))
    :return:
    """
    a = run.font
    #   磅
    a.size = Pt(size)
    #  加粗
    a.bold = bold
    #  字体
    a.name = u'' + name
    run._element.rPr.rFonts.set(qn('w:eastAsia'), u'' + name)
    #  斜体
    a.italic = italic
    #  设置字体颜色
    a.color.rgb = rgb


# 设置文档第一段样式
set_text_style(file=doc, n=0, m=1)

# 3.段落样式
# 1)style
# p1 = doc.add_paragraph('段落1', style='List')
# 2)倾斜
p2 = doc.add_paragraph('段落2.1')
# run对象=段落对象.add_run(段落后的新增内容)
run1 = p2.add_run('倾斜的内容')
# 新增内容倾斜
run1.italic = True
# 2)加粗
run2 = p2.add_run('加粗的内容')
# 新增内容加粗
run2.bold = True
run3 = p2.add_run('倾斜加粗的内容')
# 新增内容倾斜与加粗
run2.bold = True
run1.italic = True
# 如果需要将整个段落加粗倾斜不能直接使用bold与italic,可先创建一个空段落再将所有内容放入段落对象.add_run()内再进行加粗倾斜操作

# 4.在表格中显示图片
table = doc.add_table(1, 2)
cell = table.cell(0, 0)
p = cell.add_paragraph()
# 段落居中
p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run = p.add_run('1\n')
run.add_picture(r'C:\Users\devil\Pictures\wallpaper\library.jpg', width=Cm(3))

# 5.对齐方式
h1 = doc.add_heading('标题一')
# 对齐方式的值:LEET(左对齐),RIGHT(右对齐),CENTER(水平居中对齐),JUSTIFY_MED(垂直居中对齐),LEET(左对齐)
h1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 6.设置字体
# 字体的设置只能在run对象上进行设置
h1 = doc.add_heading()
run = h1.add_run('设置字体')
# 设置字体大小
run.font.size = Pt(20)
# 设置字体样式
run.font.name = u'隶书'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'隶书')

# 7.保存文件
# 文档对象.save(文件的保存路径)
doc.save('files/domo1.docx')


# WORD文件的读操作
# 1.打开word文件创建文档对象
doc = Document('files/domo1.docx')

# 2.获取段落内容
# 1)获取整个文档中所有的段落
all_p=doc.paragraphs

# 2)获取段落中的文字信息
# 段落对象.text
print(all_p[1].text)

# 3.获取表格内容
# 1)获取整个文档中所有的表
all_table=doc.tables
print(all_table)
# 2)获取表中单元格的内容
# 单元格对象.text
table = all_table[-1]
cell = table.cell(0,0)
print(cell.text)

pdf文件操作

1.pdf读操作
1)创建reader : PdfFileReader(文件对象)
reader = PdfFileReader(open( ‘files/存储引擎的讲解.pdf ’ , ‘rb’))
2)获取总页数:reader对象. numPages
page_num = reader. numPages
print(page_num)
3)获取指定页: reader对象. getPage(页数) #页数从0开始
2.pdf文件写操作
1)创建writer
创建一个空白的pdf文件C一页内容都没有)writer = PdfFileWriter()
2)添加页
writer对象.addPage(页对象)–添加从别的pdf文件中获取到的页writer.addPage(page1)
添加空白页
writer.addBlankPage(
3)保存数据
writer .write(open( ’ files/new. pdf’ , ‘wb’))

	from reportlab.pdfgen import canvas  # 提供pdf文件
	from reportlab.pdfbase import pdfmetrics  # 注册字体
	from reportlab.pdfbase.ttfonts import TTFont  # 提供字体对象
	# 1.注册字体
    # parametrics.registerFont(TTFont(字体名,字体文件的路径))
    pdfmetrics.registerFont(TTFont('font', ttf_path))

    # 2.创建空白PDF
    # canvas.Canvas(水印文件存放的位置)
    pdf = canvas.Canvas(watermark_path)

    # 3.渲染文字
    # 1)设置字体
    # pdf对象.setFont(已经注册的字体名,字号)
    pdf.setFont('font', size)

    # 2)设置文字颜色
    # setFillColorRGB(r,g,b,透明度)
    # 注意:r,g,b的取值范围是0-1(是0-255等比转换)
    # 注意:透明度的取值范围是0-1
    pdf.setFillColorRGB(r, g, b, transparency)

    # 3)文字旋转
    # pdf对象.rotate(角度)
    pdf.rotate(angle)

    # 4)渲染文字(写字)
    # drawString(x坐标,y坐标,水印的内容)
    pdf.drawString(x, y, values)

    if Image != None:
        pdf.rotate(-angle + Image_angle)
        # 添加图片水印
        pdf.drawImage(Image, Image_x, Image_y, width=width, height=height)

        # 5)保存文件
        pdf.save()

邮件自动发送

import smtplib  # 连接邮箱服务器,登录邮箱

# 1.准备工作
# 准备邮箱账号和密码(密码有的时候不一定是邮箱密码,有可能是邮箱授权码)


# 2.登录邮箱
# 1)连接邮箱服务器
# 连接对象 = smtplib.SMTP_SSL(服务器地址,邮箱服务端口)
# 服务器地址: smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
# 邮箱服务端口:465或者25


# 2)登录邮箱
# 连接对象.login(账号, 密码/授权码)

# 3.创建邮件
from email.mime.multipart import MIMEMultipart  # 提供邮件对象
from email.mime.text import MIMEText  # 邮件正文
from email.header import Header  # 邮件主题

# 1)创建邮箱对象
# 邮件对象 = MIMEMultipart()

# 2)设置主题、收件人信息、发件人信息
# 主题
# 主题对象 = Header(邮件标题, 编码⽅式).encode()
# 邮件对象['Subject'] = 主题对象

# 收件人
# 邮件对象['To'] = '收件⼈1;收件⼈2;收件⼈3...'

# 发件人
# 邮件对象['From'] = '⽤户名 <⽤户名>'


# 3)设置正文
# ⽂字内容对象 = MIMEText(内容, 类型, 编码⽅式)
# - 内容:就是⽂字字符串
# - 类型:plain(简单的⽂字内容)、html(超⽂本)

# 发送 普通文字正文
# 邮件对象.attach(⽂字对象)
# content = MIMEText('phoenixice','plain','utf-8')
# email.attach(content)

# 发送 HTML正文
# html⽂本对象 = MIMEText(html内容字符串, 'html', 编码⽅式)
# 邮件对象.attach(html⽂本对象)

from email.mime.image import MIMEImage
# 网络图片直接写地址就可以了
# 本地图片
image_data = open(本地图片地址, 'rb').read()
image = MIMEImage(image_data)
image.add_header('Content-ID', '<图片名字>')
邮件对象.attach(image)
content = MIMEText('<img src="cid:图片名字">','html','utf-8')
邮件对象.attach(content)


# 4.发送图片
# 图⽚对象 = MIMEImage(图⽚⼆进制数据)
# 图⽚对象["Content-Disposition"] = 'attachment; filename="图⽚名"'
# 邮件对象.attach(图⽚对象)
# - 图⽚⼆进制数据:可以通过⽂件操作去读取


# 5.发送附件
# from email.mime.text import MIMEText
# ⽂件对象 = MIMEText(⽂件⼆进制数据, 'base64', 编码⽅式)
# ⽂件对象["Content-Disposition"] = 'attachment; filename="⽂件名"'
# 邮件对象.attach(⽂件对象)
# 注意附件不要用 bat文件会导致图片不可用


# 4.发送邮件
# 连接对象.sendmail(发件⼈, 收件⼈, 邮件对象.as_string())


# 5.退出登录
# 连接对象.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值