分享

用python编辑word的好处_python编辑word与读Excel的经验

 wenxuefeng360 2022-07-03 发布于四川

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,代表了各个不同格式的小段。

8994a4534d33a9f685ca65394614e74b.png

这里有一个问题,如果直接用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条评论

    发表

    请遵守用户 评论公约

    类似文章 更多