python编辑word与读Excel的经验

本文分享了使用Python的docx、xlrd和openxl库处理Office文档的经验,包括根据Excel数据批量替换Word关键词、识别表格差异,并介绍了操作Word的paragraphs和tables,以及Excel的单元格处理,特别提到了日期格式转换的问题。
摘要由CSDN通过智能技术生成

python编辑word与读Excel的经验

前段时间为了解决工作上的一些问题,有听说python有相关的库编辑Office文档很方便,就被骗进坑了。为了避免后来者再遇到相同的坑,所以把这些经验写下来方便后来者。
首先描述一下我打算实现的功能,我打算根据Excel表中的值,来对Word中相应的词进行替换,以达到自动化根据模板处理文档的功能。简单的来说就是批量Ctrl+H和重命名文件。

一、按照Ecxel表格中的一些关键词替换word文档中的相应词,再按照某个关键词保存成单个word文档。
二、标记处两个表格中差异的部分(找出表格中那里被重新编译过)
然后在介绍下我用到的第三方库:docx,xlrd,openxl
值得注意的是,docx库只能编辑docx文件,openxl只能读写xlsx文件,xlrd只能读xls和xlsx文件,使用时要注意文件格式,区别doc与docx,xls与xlsx。

三、认识要操作的对象:
Word:一个文件对应一个doc对象先载入from docx import Document
然后打开文件

doc1 = Document('path')  # 打开模板

这个对象中我主要操作的是,文段paragraphs和表格tables,其他还有很多内部的对象我也没必要一个个去研究,相比之下可视化(shou dong)操作更适合处理那些问题。文段和表格划分的范围比较大,一般以大段落和和文本框划定。文段和表格中的字段中有很多的字段runs,代表了各个不同格式的小段。
在这里插入图片描述
这里有一个问题,如果直接用replace替换paragraph.text中的文字是可行的,但是问题是会丢失格式。
而用replace替换run.text中的字符串则不会有丢失格式的问题,不过同时会有run会把你原来想要的文字分割开的问题(比较少见)。产生上述问题的具体原因,看相应的源文件可以知晓。

doc1.save('C:/Users/一个老帅逼/Desktop/模板式资料/'+Sheet.cell_value(i,0)+'.docx')#保存文件

Excel:一个文件对应一个work_book 先载入

import xlrd

蓝后

book=xlrd.open_workbook('filepth.xls')    #打开一个工作簿
sheet1 = book.sheet_by_index(0)  #通过索引取TAB,获取一个工作表
nRows=sheet1.nrows#获取行数
nCols=sheet1.ncols#获取列数
for i in range(nRows):#遍历行
for j in range(nCols)#遍历列

得到行数列数后就可以处理数据了,这里主要是要操作是的是cell也就是单元格,和word的差别是里面没有再分段落
直接用

Sheet.cell_value(i, j)

就可以获取单元格中的字符串。
有一种特殊情况就是获取时间,在xls中的时间是以数字格式(非专业说法)保存的,直接读取只能返回一堆数字。此时就要用转化的函数,下面提供一个案例:

import _datetime
from xlrd import xldate_as_tuple
def changtostr(Sheet,i,j,d):#时间转字符串(sheet-工作表 i-行号 j-列号 d-延后时间)
	Cell=Sheet.cell_value(i,j)
	date=datetime(*xldate_as_tuple(Cell, 0))
	delta=_datetime.timedelta(days=d)
   	outtime=date+delta
	return outtime.strftime('%Y年%m月%d日')

涉及到强制转换等等问题,让我想起了被句柄支配的恐惧。现在对于面向CSDN编程的我来说,暂时不想去探究,拿来用就好了。所以处理时间前先要判断这个是否是时间,用到

if Sheet.cell(i,j).ctype==3:#如果是日期

此外还有其他的类型

ctype_text = {
    XL_CELL_EMPTY: 'empty',#1
    XL_CELL_TEXT: 'text',#2
    XL_CELL_NUMBER: 'number',#3
    XL_CELL_DATE: 'xldate',#4
    XL_CELL_BOOLEAN: 'bool',#5
    XL_CELL_ERROR: 'error',#6
    XL_CELL_BLANK: 'blank',#7
}

就写到这了,留下来一个坑:Excel的读写问题。如果这篇文章能有点响应下次我抽时间再分享。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值