当前位置:   article > 正文

python实现办公自动化_python办公自动化

python办公自动化

目录

一 python办公自动化所需类库

二 python操作excel文件

三 python自动发送邮件

四 python操作word文件

五 python操作PPT文件


一 python办公自动化所需类库

python操作excel、word、ppt所需库如下,

  1. import xlrd3 # 读取表格
  2. import xlwt # 写入工作表
  3. import xlsxwriter # 支持大文件写入工作表
  4. import smtplib # 邮件发送
  5. # 邮件发送格式扩展
  6. from email.mime.text import MIMEText
  7. from email.mime.multipart import MIMEMultipart
  8. from email.mime.application import MIMEApplication
  9. # ppt操作
  10. from docx import Document
  11. from docx.shared import Pt, RGBColor
  12. from docx.enum.style import WD_STYLE_TYPE
  13. from docx.enum.text import *
  14. # word转pdf
  15. from win32com.client import constants, gencache
  16. import os # 系统常用操作
  17. import random
  18. import pptx # 操作ppt
  19. from pptx.util import Inches, Pt
  20. from pptx.enum.shapes import MSO_SHAPE # 不影响程序运行
  21. from pptx.dml.color import RGBColor
  22. from pptx.chart.data import CategoryChartData
  23. from pptx.enum.chart import XL_CHART_TYPE
  24. from pptx.enum.chart import XL_LEGEND_POSITION

二 python操作excel文件

  1. # 读取excel文件
  2. # data = xlrd3.open_workbook('data.xlsx')
  3. # load=data.sheet_loaded(0) #加载第一个工作表,卸载工作表使用sheet_loaded(0)
  4. # print(load)
  5. # print(data)
  6. # d2=data.sheets()
  7. # print(d2) #根据索引获取工作表
  8. # print(data.sheet_by_name('Sheet1') )#根据名字获取工作表
  9. # print(data.sheet_names()) #获取所有工作表的名称
  10. # print(data.nsheets) #工作表的个数
  11. # 操作行
  12. # sheet=data.sheet_by_index(0) #获取工作表
  13. # print(sheet.nrows) #获取有效行
  14. # print(sheet.row(1)) #第一行的内容
  15. # print(sheet.row_types(2)) #数据类型,2表示数字
  16. # print(sheet.row(1)[2].value) #获取单元格的值
  17. # print(sheet.row_values(1)) #获取指定行的单元格的值
  18. # print(sheet.row_len(1)) #获取单元格的长度
  19. # 操作列
  20. # sheet=data.sheet_by_index(0)
  21. # print(sheet.nrows) #列数
  22. # print(sheet.col(1)) #指定列的内容
  23. # print(sheet.col(1)[1].value) #指定列的单元格内容
  24. # print(sheet.col_values(1)) #第一列的内容
  25. # print(sheet.col_types(1) ) #指定列的数据类型
  26. # 操作单元格
  27. # sheet=data.sheet_by_index(0)
  28. # print(sheet.cell(1,1)) #获取指定行列的数据类型
  29. # print(sheet.cell_type(1,2)) #获取指定单元格的数据类型
  30. # print(sheet.cell(1,1).ctype) #获取指定单元格的数据类型
  31. # print(sheet.cell(1,1).value) #获取值
  32. # print(sheet.cell_value(1,1)) #获取指定单元格的内容
  33. # 初始化字体属性
  34. # titlestyle = xlwt.XFStyle()
  35. #
  36. # # 设置字体
  37. # titlefont = xlwt.Font()
  38. # titlefont.name = '宋体'
  39. # titlefont.bold = True
  40. # titlefont.height = 11 * 20
  41. # titlefont.colour_index = 0x80
  42. # titlestyle.font = titlefont
  43. #
  44. # # 单元格对齐方式
  45. # cellalient = xlwt.Alignment()
  46. # cellalient.horz = 0x02
  47. # cellalient.vert = 0x01
  48. # titlestyle.alignment = cellalient
  49. #
  50. # # 边框
  51. # borders = xlwt.Borders()
  52. # borders.right = xlwt.Borders.DASHED
  53. # borders.bottom = xlwt.Borders.DOTTED
  54. # titlestyle.borders = borders
  55. #
  56. # # 背景颜色
  57. # datastyle = xlwt.XFStyle()
  58. # bgcolor = xlwt.Pattern()
  59. # bgcolor.pattern = xlwt.Pattern.SOLID_PATTERN
  60. # bgcolor.pattern_fore_colour = 22 # 背景颜色
  61. # datastyle.pattern = bgcolor
  62. #
  63. # # 写入excel
  64. # wb = xlwt.Workbook() # 表对象
  65. # ws = wb.add_sheet('wsb') # 添加工作表
  66. # ws.write_merge(0, 1, 0, 5, '货币兑换表', titlestyle) # 添加内容,0、1是行,0、5是列范围,titlestyle为字体样式
  67. #
  68. # data = (('05', 1, 2, 3, 3), ('06', 2, 1, 1, 4)) # 使用元组保存需要存储的数据
  69. #
  70. # # 遍历元组写入内容
  71. # for i, item in enumerate(data):
  72. # for j, val in enumerate(item):
  73. # if j == 0:
  74. # ws.write(i + 2, j, val, datastyle) # 以单元格的方式循环写入,datastyle为自定义的样式
  75. # else:
  76. # ws.write(i + 2, j, val) # 以单元格的方式循环写入
  77. #
  78. # # 创建第二个工作表
  79. # wsimage = wb.add_sheet('image')
  80. # # 写入图片: 参数含义为图片名称,行列
  81. # # wsimage.insert_bitmap('a.jpg', 0, 0) #不支持png或jpg格式的图片
  82. #
  83. #
  84. # wb.save('2022.xls') # 保存数据,创建工作表,只支持xls格式
  85. # 支持大文件写入模块xlsxwriter的基本使用
  86. # wb = xlsxwriter.Workbook('data.xlsx') # 获得文件对象
  87. # cell_format = wb.add_format({'bold': True}) # 通过字典设置格式化对象
  88. #
  89. # # 通过对象格式化对象
  90. # cell_format1 = wb.add_format()
  91. # cell_format1.set_bold() # 设置加粗
  92. # cell_format1.set_font_color('red') # 颜色
  93. # cell_format1.set_font_size(14) # 字体大小
  94. # cell_format1.set_align('center') # 居中显示
  95. #
  96. # cell_format2 = wb.add_format()
  97. # cell_format2.set_bg_color('00FFFF') # 设置背景颜色
  98. #
  99. # sheet = wb.add_worksheet('newsheet') # 创建工作表
  100. # # 写入
  101. # sheet.write(0, 0, '2022年', cell_format1)
  102. # sheet.merge_range(1, 0, 2, 2, '销售数据') # 合并单元格
  103. #
  104. # # 数据
  105. # dt = (
  106. # ['一月', 100, 200],
  107. # ['二月', 140, 270],
  108. # ['三月', 190, 210]
  109. # )
  110. #
  111. # # 写入行
  112. # sheet.write_row(3, 0, ['月份', '预期销售额', '实际销售额'], cell_format2)
  113. # # 遍历并写入数据
  114. # for index, item in enumerate(dt):
  115. # sheet.write_row(index + 4, 0, item)
  116. # # 写入excel公式,计算结果
  117. # sheet.write(7, 1, '=sum(B5:B7)')
  118. # sheet.write(7, 2, '=sum(C5:C7)')
  119. # # 写入链接
  120. # sheet.write_url(9, 0, 'https://www.imooc.com/course/list?c=python', string='更多数据')
  121. # # 写入图片
  122. # sheet.insert_image(10, 0, 'Qt.png')
  123. #
  124. # # 写入图表
  125. # chart = wb.add_chart({'type': 'column'})
  126. # chart.set_title({'name': '第一季度生产统计'})
  127. # # X,Y描述信息
  128. # chart.set_x_axis({'name': '月份'})
  129. # chart.set_y_axis({'name': '生产统计'})
  130. # # 数据
  131. # chart.add_series({
  132. # 'name': '预期生产',
  133. # '月份': '=newsheet!$A&5:&A&7',
  134. # 'values': ['newsheet', 4, 1, 6, 1],
  135. # 'data_labels': {'value': True} #显示数据标签
  136. # })
  137. # chart.add_series({
  138. # 'name': '实际生产',
  139. # '月份': '=newsheet!$A&5:&A&7',
  140. # 'values': ['newsheet', 4, 2, 6, 2],
  141. # 'data_labels': {'value': True}
  142. # })
  143. # sheet.insert_chart('A43', chart)
  144. #
  145. # wb.close()
'
运行

三 python自动发送邮件

  1. # 邮件发送地址
  2. # host_server = 'smtp.qq.com' # 主机地址
  3. # sender = '1234@qq.com' # 发件人邮箱
  4. # code = 'dfsfsdfsd' # 邮箱授权码
  5. # user1 = '1222@qq.com' # 收件人
  6. #
  7. # # 邮件数据
  8. # mail_title = '2月平均收入' # 邮件标题
  9. # mail_content = '1月平均收入,请查看附件' # 内容
  10. # attachment = MIMEApplication(open('data.xlsx', 'rb').read()) # 附件
  11. # attachment.add_header('Content-Disposition', 'attachment', filename='data.xlsx') # 附件属性
  12. #
  13. # smtp = smtplib.SMTP(host_server) # SMTP
  14. # smtp.login(sender, code) # 登录
  15. # # 发送
  16. # msg = MIMEMultipart() # 带附件的实例
  17. # msg['Subject'] = mail_title
  18. # msg['From'] = sender
  19. # msg['To'] = user1
  20. # msg.attach(MIMEText(mail_content))
  21. # msg.attach(attachment)
  22. # smtp.sendmail(sender, user1, msg.as_string())
'
运行

四 python操作word文件

  1. # docment = Document() # 创建文档对象
  2. # docment.add_heading('wsb简述', level=4) # 写入内容,指定标题级别
  3. #
  4. # # 样式
  5. # style = docment.styles.add_style('textstyle', WD_STYLE_TYPE.PARAGRAPH) # 给段落设置样式
  6. # print(style.style_id) # 打印样式id
  7. # print(style.name) # 打印样式名称
  8. # style.font.size = Pt(5) # 字体大小
  9. #
  10. # #删除样式
  11. # #docment.styles['textstyle'].delete()
  12. #
  13. # # 段落
  14. # p1 = docment.add_paragraph('这是一个非常努力的小伙子,值得信赖', style='textstyle')
  15. # p1.insert_paragraph_before('hello') # 插入段落
  16. # # 段部落格式
  17. # format = p1.paragraph_format
  18. # format.left_indent = Pt(20) # 左侧缩进
  19. # format.right_indent = Pt(20) # 右侧缩进
  20. # format.first_line_indent = Pt(20) # 首行缩进
  21. # format.line_spacing = 1.5 # 行间距
  22. #
  23. # run = p1.add_run('hello world hello python')
  24. # run1 = p1.add_run('python是一门有趣的语言')
  25. #
  26. # # 字体、字号、文字颜色
  27. # run.font.size = Pt(12)
  28. # run.font.name = '微软雅黑'
  29. # run.font.color.rgb = RGBColor(235, 33, 24)
  30. #
  31. # # 加粗、下划线、斜体
  32. # run1.bold = True
  33. # run1.font.underline = True
  34. # run1.font.italic = True
  35. #
  36. # # 插入图片:指定长宽
  37. # docment.add_picture('a.jpg', Pt(50), Pt(50))
  38. # # 插入表格
  39. # table = docment.add_table(rows=1, cols=3, style='Medium List 2') # 1行三列
  40. # header_cells = table.rows[0].cells
  41. # header_cells[0].text = '月份'
  42. # header_cells[1].text = '预期'
  43. # header_cells[2].text = '实际'
  44. # # 数据
  45. # data = (
  46. # ['一月', 200, 100],
  47. # ['二月', 600, 300],
  48. # ['三月', 800, 900]
  49. # )
  50. # # 写入数据
  51. # for item in data:
  52. # rows_cells = table.add_row().cells
  53. # rows_cells[0].text = item[0]
  54. # rows_cells[1].text = str(item[1])
  55. # rows_cells[2].text = str(item[2])
  56. #
  57. # # 获取表格
  58. # print(len(docment.tables[0].rows)) # 行数
  59. # print(len(docment.tables[0].columns)) # 列数
  60. # print(docment.tables[0].cell(0, 2).text) # 单元格内容
  61. #
  62. # docment.save('wsb.docx') # 保存文档并指定文件的名称
  63. # word转PDF
  64. # def createpdf(wordPath, pdfPath):
  65. # word = gencache.EnsureDispatch('Word.Application')
  66. # doc = word.Documents.Open(wordPath, ReadOnly=1)
  67. # # 转换方法
  68. # doc.ExportAsFixedFormat(pdfPath, constants.wdExportFormatPDF)
  69. # word.Quit()
  70. #
  71. #
  72. # #createpdf('H:/1-DOE实验设计-新规划/python/python办公自动化/wsb.docx', 'H:/1-DOE实验设计-新规划/python/python办公自动化/info.pdf')
  73. #
  74. # # word转PDF:多个文件的转换
  75. # print(os.listdir(".")) # 当前文件夹下的所有文件
  76. # wordfiles=[]
  77. # for file in os.listdir('.'):
  78. # if file.endswith(('.doc','.docx')):
  79. # wordfiles.append(file)
  80. #
  81. # print(wordfiles)
  82. # for file in wordfiles:
  83. # filepath=os.path.abspath(file)
  84. # index=filepath.rindex('.')
  85. # pdfpath=filepath[:index]+'.pdf'
  86. # print(filepath)
  87. # print(pdfpath)
  88. # createpdf(filepath,pdfpath)
  89. # 案例:随机生成试卷,使用test.xlsx来生成不同的word试卷
  90. # data = xlrd3.open_workbook('test.xlsx')
  91. # sheet = data.sheet_by_index(0)
  92. # print(data.nsheets)
  93. # print(sheet.nrows)
  94. #
  95. # class Quesition:
  96. # pass
  97. #
  98. #
  99. # def createQuestion():
  100. # questionlist = []
  101. # for i in range(sheet.nrows):
  102. # if i > 1:
  103. # obj = Quesition()
  104. # obj.subject = sheet.cell(i, 1).value # 题目
  105. # obj.quesitiontype = sheet.cell(i, 2).value # 题型
  106. # # ABCD四个选项
  107. # obj.option = []
  108. # obj.option.append(sheet.cell(i, 3).value)
  109. # obj.option.append(sheet.cell(i, 4).value)
  110. # obj.option.append(sheet.cell(i, 5).value)
  111. # obj.option.append(sheet.cell(i, 6).value)
  112. # # 分值
  113. # obj.score = sheet.cell(i, 7).value
  114. # questionlist.append(obj)
  115. # random.shuffle(questionlist) # 随机排序试题
  116. # return questionlist
  117. #
  118. #
  119. # # 生成word试卷
  120. # def createPaper(filename, papername, questionlist):
  121. # document = Document()
  122. # # 页眉和页脚信息
  123. # section = document.sections[0]
  124. # header = section.header
  125. # p1 = header.paragraphs[0]
  126. # p1.text = papername
  127. # footer = section.footer
  128. # p2 = footer.paragraphs[0]
  129. # p2.text = '内部试卷,禁止泄露'
  130. #
  131. # # 试卷基本信息
  132. # title = document.add_heading(papername, level=1)
  133. # # title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
  134. # p3 = document.paragraph()
  135. # p3.add_run('姓名:_____')
  136. # p3.add_run('所属部门:_____')
  137. # # p3.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
  138. # # 试题信息
  139. # for quesiton in questionlist:
  140. # subject = document.add_paragraph()
  141. # run = subject.add_run(quesiton.subject)
  142. # run.blod = True
  143. # subject.add_run('[%s]分' % str(quesiton.score))
  144. # random.shuffle(quesiton.option) # 打乱题目顺序
  145. # for index, option in enumerate(quesiton.option):
  146. # document.add_paragraph(('ABCD')[index] + str(option))
  147. # document.save(filename)
  148. # for i in range(10):
  149. # qss = createQuestion()
  150. # createPaper('paper' + str(i + 1) + '.docx', '2023计算机考试', qss)
'
运行

五 python操作PPT文件

  1. # PPT操作
  2. prs = pptx.Presentation('text.pptx') # 文件存在时可以写明文件名称
  3. # 新增三张幻灯片
  4. slide = prs.slides.add_slide(prs.slide_layouts[0])
  5. # prs.slides.add_slide(prs.slide_layouts[1])
  6. # prs.slides.add_slide(prs.slide_layouts[2])
  7. # 删除幻灯片
  8. print(len(prs.slides)) # 幻灯片数量
  9. # del prs.slides._sldIdLst[1] #删除第二张幻灯片
  10. # 设置幻灯片与上下左右的间距为5英寸
  11. text1 = slide.shapes.add_textbox(Inches(5), Inches(5), Inches(5), Inches(5))
  12. text1.text = '我是文本框'
  13. p1 = text1.text_frame.add_paragraph()
  14. p1.text = '我是段落1'
  15. p1.add_run().text = 'end'
  16. title_shape = slide.shapes.title
  17. title_shape.text = '标题1'
  18. slide.shapes.placeholders[1].text = '标题2'
  19. # 添加图形到PPT
  20. shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, Inches(2), Inches(2), Inches(2), Inches(2)) # 矩形
  21. # 填充、边框
  22. fill = shape.fill
  23. fill.solid()
  24. fill.fore_color.rgb = RGBColor(255, 0, 0)
  25. line = shape.line
  26. line.color.rbg = RGBColor(44, 22, 67)
  27. line.width = Pt(2)
  28. # 写入表格: 2和3指2行3列,6指间隔左侧与顶部的间隔,4指表格长宽
  29. table = slide.shapes.add_table(3, 3, Inches(6), Inches(6), Inches(4), Inches(4)).table
  30. # 向表格中插入内容
  31. table.cell(1, 0).text = 'name'
  32. table.cell(1, 1).text = 'age'
  33. table.cell(1, 2).text = 'class'
  34. table.cell(2, 0).text = '小明'
  35. table.cell(2, 1).text = '22'
  36. table.cell(2, 2).text = '九年级一班'
  37. # 合并单元格
  38. cell = table.cell(0, 0)
  39. cell1 = table.cell(0, 2)
  40. cell.merge(cell1)
  41. table.cell(0, 0).text = '班级信息'
  42. # 取消合并
  43. if cell.is_merge_origin: # 判断当前单元格是否已经被合并
  44. cell.split()
  45. # 写入图表
  46. chart_data = CategoryChartData()
  47. chart_data.categories = ['一月', '二月', '三月'] # X轴
  48. chart_data.add_series('2022', (200, 500, 400))
  49. chart_data.add_series('2020', (300, 800, 600))
  50. chart = slide.shapes.add_chart(XL_CHART_TYPE.COLUMN_CLUSTERED, Inches(2), Inches(2), Inches(6), Inches(4),
  51. chart_data).chart
  52. chart.has_title = True
  53. chart.chart_title.text_frame.text = '第一季度生产额'
  54. chart.has_legend = True
  55. chart.legend.position = XL_LEGEND_POSITION.RIGHT
  56. prs.save('text.pptx') # 保存修改

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1020998
推荐阅读
相关标签
  

闽ICP备14008679号