在日常工作中,Python在办公自动化领域应用非常广泛,如批量将多个Excel中的数据进行计算并生成图表,批量将多个Excel按固定格式转换成Word,或者定时生成文件并发送邮件等场景。本文主要以一个简单的小例子,简述Python在Excel和Word方面进行相互转换的相关知识点,谨供学习分享使用,如有不足之处,还请指正。

相关知识点

本文主要是将Excel文件通过一定规则转换成Word文档,涉及知识点如下所示:

  • xlrd模块:主要用于Excel文件的读取,相关内容如下:

    • xlrd.open_workbook(self.excel_file) 打开Excel文件并返回文档对象,参数为Excel的完整路径
    • book.sheet_by_name(self.sheet_name) 通过名称获取对应的sheet页,并返回sheet对象
    • sheet.nrows sheet页的有效行数
    • sheet.ncols sheet页的有效列数
    • sheet.row_values(0) 返回Excel中对应sheet页的第一行的值,以数组返回
    • sheet.cell_value(row, col) 返回某一个单元格的值
  • python-docx模块:主要操作Word文档,如:表格,段落等相关,相关内容如下所示:
    • Document word的文档对象,代表整个word文档
    • doc.sections[0] 获取章节
    • doc.add_section(start_type=WD_SECTION_START.CONTINUOUS) 添加连续章节
    • doc.add_heading(third, level=2) 增加标题,level表示级别,如二级标题,返回标题对象
    • doc.add_paragraph(text='', style=None) 增加段落,返回段落对象
    • doc.add_table(rows=4, cols=5) 增加表格,并返回表格对象
    • doc_table.style = "Table Grid" 设置表格样式
    • doc_table.rows[0].cells[1].merge(doc_table.rows[0].cells[4]) 合并单元格
    • doc_table.rows[3].cells 获取表格某一行所有单元格,以数组形式返回
    • head_cells[0].width = Cm(1.9) 设置列宽,单位cm
    • doc_table.rows[i].cells[j].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER 表格内容垂直居中
    • doc_table.add_row() 新增行,并返回行对象

插件安装

插件可以在pycharm的terminal面板下进行安装。python-docx安装命令为:pip install python-docx

xlrd安装命令为:pip install xlrd  如下所示:

数据源文件

数据源是一系列格式相同的Excel文件,共七列,其中第1列要按【/】进行截取拆分,格式如下:

核心代码

本文核心源码,主要分三部分:

导入相关模块包,如下所示:

import xlrd
from docx import Document
from docx.enum.section import WD_ORIENTATION
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Pt, Cm, RGBColor
from docx.oxml.ns import qn
from docx.enum.table import WD_CELL_VERTICAL_ALIGNMENT

读取Excel,如下所示:

def read_excel(self):"""读取Excel"""book = xlrd.open_workbook(self.excel_file)sheet = book.sheet_by_name(self.sheet_name)nrows = sheet.nrows  # 行数ncols = sheet.ncols  # 列数datas = []  # 存放数据# 第一列 标题keys = sheet.row_values(0)for row in range(1, nrows):data = {}  # 每一行数据for col in range(0, ncols):value = sheet.cell_value(row, col)  # 取出每一个单元格的数据# 替换到特殊字符value = value.replace('<', '').replace('>', '').replace('$', '')data[keys[col]] = value# 截取第一列元素if col == 0:first = ''  # 截取元素 第1second = ''  # 截取元素 第2third = ''  # 截取元素 第3arrs = value.lstrip('/').split('/')  # 去掉第一个/ 然后再以/分组if len(arrs) > 0:if len(arrs) == 1:first = arrs[0]second = firstthird = secondelif len(arrs) == 2:first = arrs[0]second = arrs[1]third = secondelif len(arrs) == 3:first = arrs[0]second = arrs[1]third = arrs[2]else:first = arrs[0]second = arrs[1]third = arrs[2]else:first = value.ltrip('/')second = firstthird = seconddata['first'] = firstdata['second'] = seconddata['third'] = third# 截取第一列结束datas.append(data)return datas

生成Word部分:

def write_word(self, datas):"""生成word文件"""if len(datas) < 1:print('Excel没有内容')return# 定义word文档对象doc = Document()# 添加横向section = doc.sections[0]  # doc.add_section(start_type=WD_SECTION_START.CONTINUOUS)  # 添加横向页的连续节section.orientation = WD_ORIENTATION.LANDSCAPEpage_h, page_w = section.page_width, section.page_heightsection.page_width = page_w  # 设置横向纸的宽度section.page_height = page_h  # 设置横向纸的高度# 设置字体doc.styles['Normal'].font.name = u'宋体'doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')# 获取第3部分(部门) 并去重data_third = []for data in datas:third = data['third']if data_third.count(third) == 0:data_third.append(third)for third in data_third:h2 = doc.add_heading(third, level=2)  # 写入部门,二级标题run = h2.runs[0]  # 可以通过add_run来设置文字,也可以通过数组来获取run.font.color.rgb = RGBColor(0, 0, 0)run.font.name = u'宋体'doc.add_paragraph(text='', style=None)  # 增加空白行 换行# 开始获取模板data_template = []for data in datas:if data['third'] == third:template = {'first': data['first'], '模板名称': data['模板名称']}if data_template.count(template) == 0:data_template.append(template)# 获取模板完成# 遍历模板for template in data_template:h3 = doc.add_heading(template['模板名称'], level=3)  # 插入模板名称,三级标题run = h3.runs[0]  # 可以通过add_run来设置文字,也可以通过数组来获取run.font.color.rgb = RGBColor(0, 0, 0)run.font.name = u'宋体'doc.add_paragraph(text='', style=None)  # 换行data_table = filter(lambda data: data['third'] == third and data['模板名称'] == template['模板名称'] and data['first'] ==template['first'], datas)data_table = list(data_table)# 新增表格 4行5列doc_table = doc.add_table(rows=4, cols=5)doc_table.style = "Table Grid"doc_table.style.font.size = Pt(9)doc_table.style.font.name = '宋体'# 合并单元格 赋值doc_table.rows[0].cells[1].merge(doc_table.rows[0].cells[4])doc_table.rows[1].cells[1].merge(doc_table.rows[1].cells[4])doc_table.rows[2].cells[1].merge(doc_table.rows[2].cells[4])doc_table.rows[0].cells[0].text = '流程名称:'doc_table.rows[0].cells[1].text = data_table[0]['模板名称']doc_table.rows[1].cells[0].text = '使用人:'doc_table.rows[1].cells[1].text = data_table[0]['first']doc_table.rows[2].cells[0].text = '流程说明:'doc_table.rows[2].cells[1].text = data_table[0]['流程说明']# 设置标题head_cells = doc_table.rows[3].cells  # 前面还有三行,特殊处理head_cells[0].text = '节点'head_cells[1].text = '节点名'head_cells[2].text = '处理人员'head_cells[3].text = '处理方式'head_cells[4].text = '跳转信息'# 设置列宽head_cells[0].width = Cm(1.9)head_cells[1].width = Cm(4.83)head_cells[2].width = Cm(8.25)head_cells[3].width = Cm(2.54)head_cells[4].width = Cm(5.64)# 第1 列水平居中,并设置行高,所有单元格内容垂直居中for i in range(0, 4):# 水平居中p = doc_table.rows[i].cells[0].paragraphs[0]p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdoc_table.rows[i].height = Cm(0.6)  # 行高# 垂直居中for j in range(0, 5):doc_table.rows[i].cells[j].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTER# 生成表格并填充内容row_num = 0for data in data_table:row = doc_table.add_row()row_cells = row.cellsrow_cells[0].text = str(row_num + 1) # 序号,需要转换成字符串row_cells[1].text = data['节点名称']row_cells[2].text = data['审批人员']row_cells[3].text = data['审批方式']row_cells[4].text = ''# 水平居中p = row_cells[0].paragraphs[0]p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERrow.height = Cm(0.6)  # 行高# 垂直居中for j in range(0, 5):row_cells[j].vertical_alignment = WD_CELL_VERTICAL_ALIGNMENT.CENTERrow_num = row_num + 1doc.add_paragraph(text='', style=None)  # 换行doc.save(self.word_file)

备注

子曰:“不患无位,患所以立。不患莫己知,求为可知也。

Python办公自动化之Excel转Word相关推荐

  1. excel 图片转url_最全总结 | 聊聊 Python 办公自动化之 Excel(下)

    聊聊 Python 数据处理全家桶(Memca 篇) 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 前言 前面 ...

  2. python excel 打印文档_教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!...

    原标题:教你如何用Python轻轻松松操作Excel.Word.CSV,一文就够了,赶紧码住!!! 作者:奈何缘浅wyj Python 操作 Excel 常用工具 数据处理是 Python 的一大应用 ...

  3. Python 办公自动化之一 Excel

    在我们日常工作中,经常会使用 Word.Excel.PPT.PDF 等办公软件,但是,经常会遇到一些重复繁琐的事情,这时候手工操作显得效率极其低下;通过 Python 实现办公自动化变的很有必要,接下 ...

  4. python自动化办公 51cto_聊聊 Python 办公自动化之一 Excel

    本文转载自微信公众号「AirPython」,作者星安果.转载本文请联系AirPython公众号. 1. 前言 在我们日常工作中,经常会使用 Word.Excel.PPT.PDF 等办公软件 但是,经常 ...

  5. Python办公自动化 - 3 Excel办公自动化

    这是一个Python编程简单入门的系列教程,课程所有资料(代码.测试文件)可以从百度网盘下载: 链接:https://pan.baidu.com/s/1oS27bE9Pyns4Patf05ehLA 提 ...

  6. 使用Python自动化Microsoft Excel和Word

    将Excel与Word集成,无缝生成自动报告 毫无疑问,微软的Excel和Word是公司和非公司领域使用最广泛的两款软件.它们实际上是"工作"的同义词.通常情况下,每一周我们都会将 ...

  7. asp.net 设置 excel alignment_教你如何用Python轻轻松松操作Excel、Word、CSV,一文就够了,赶紧码住!!!...

    作者:奈何缘浅wyj https://juejin.im/post/6868073137263607821 Python 操作 Excel 常用工具 数据处理是 Python 的一大应用场景,而 Ex ...

  8. 万字长文:用Python轻轻松松操作Excel、Word、CSV!

    来源丨编程派 原文丨https://juejin.im/post/6868073137263607821 Python 操作 Excel 常用工具 数据处理是 Python 的一大应用场景,而 Exc ...

  9. ​Python办公自动化之Excel最全整理

    ​     python的列表,可以和Excel中的行列进行数据交换,python中的一维列表,在Excel中默认为一行数据.python的二维列表,可以转换为Excel中的行列.二维列表,即列表中的 ...

最新文章

  1. 今天分享个用Python爬虫爬取Bilibili弹幕的小例子解析
  2. 帝国cms7.5 utf-8本地网站电脑手机模板开发同步插件即时预览修改结果
  3. 客户端程序初步加入网络通讯的功能
  4. 12、INNER JOIN:内连接
  5. 黑马程序员的课程不如兄弟连兄弟会好
  6. LSTM拟合正弦曲线代码(转载)
  7. FATAL ERROR in native method: JDWP No Transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_IN,ec
  8. 【三万字!】Dubbo、Zookeeper学习笔记!秒杀面试官!——双非上岸阿里巴巴系列
  9. 使用Spring Security添加RememberMe身份验证
  10. 微信开发第7章 通过accesstoken获取用户黑名单列表
  11. ios并发会造成什么问题_女生月经不调会引起什么并发症?
  12. Pycharm乱码解决大全
  13. 端口扫描工具是什么?端口扫描工具有什么用
  14. 单机版传奇传奇服务端架设传奇服务器架设
  15. 向日葵远程控制桌面可以播放被控主机的声音-详解(亲测有效)
  16. Web前端开发入门学习分享
  17. 计算机三种不同类型的用户账户,网络操作系统——Windows Server 2008篇 教学课件 1 作者 刘本军 李建利 [项目5]用户与组的管理.ppt...
  18. HDU 4114 Disney's FastPass(状压dp)
  19. 电信云服务器重装系统,天翼云主机操作(二)
  20. 三言|格局决定结局 态度决定高度

热门文章

  1. 魔兽世界怀旧服哪个服务器bl最多,什么叫游戏服务器《魔兽世界怀旧服》哪个服务器人多 人多服务器推荐...
  2. 近1万人次参赛 T3出行全国首届车载实况足球冠军赛收官
  3. mysql里的as什么意思_SQL数据库中 SELECT AS 中的AS 代表什么意思???
  4. 抒一怀感恩,献给妈妈
  5. 聚美出空气净化器 陈欧再为自己代言
  6. 关于思念的短信 思念情人的短信
  7. 安存360度全方位电子数据存证
  8. Time to upgrade my Minecraft to premium https://freeminecraftgiftcode.net :D
  9. Android清空画布
  10. 法师VS战士PK小谈