这次的需求是从表格中获取图斑编号和页码,组成目录,然后按乡镇村分开并输出docx。
首先可以把这次需求分成几个部分:
1、从表格中读取数据,并用一个字典储存其中的数据。
def dqbg():
table = xlrd.open_workbook("DQBH.xls", 'r')
sheet1 = table.sheet_by_name("Sheet1")
nrows = sheet1.nrows
global cglist
cglist = []
for rown in range(1,nrows):
data_list = {}
list1 = sheet1.row_values(rown)
data_list["房屋编号"] = list1[0]
data_list["乡镇名"] = list1[1]
data_list["村名"] = list1[2]
data_list["编号"] = int(list1[3])
cglist.append(data_list)
return cglist
dqbg()
这里在写的时候遇见了错误,需要注意每个循环内用来装数据的容器需要放在循环内部,否则就只会有最后一个数据输出。
还需要注意的是表格中的数字在读取的时候自动会变成浮点数,日期等特殊格式也会改变,这部分数据需要根据实际需求进行相应的处理。
2、根据读取的乡镇村的名字创建文档。
for each_line1 in cglist:
f = open((each_line1["乡镇名"]+each_line1["村名"]+".txt"),"w",encoding='utf-8')
f.writelines(" "*20 + "目录" + " "*20 + "\n")
f.close()
3、遍历创建的文档,将列表中的数据与其匹配。
wjm = os.walk(os.curdir)
list1 = []
for wjmc in wjm:
for i in wjmc[2]:
list1.append(i)
for each_line in cglist:
for g in list1:
gsplit = g.split(".")
if (each_line["乡镇名"]+each_line["村名"]) == gsplit[0]:
str1 = ""
str1 += each_line["房屋编号"] + "-" * 20 + str(each_line["编号"]) + "\n"
得到了与之对应的文档中的图斑编号等数据。
4.(1)输出TXT
f1 = open((gsplit[0] + ".txt"), "a", encoding='utf-8')
f1.writelines(str1)
f1.close()
(2)输出DOCX
要输出DOCX需要对代码进行简单的修改,将上面新建TXT改成新建DOCX。
document = Document(each_line["乡镇名"]+each_line["村名"]+".docx")
paragraph = document.add_paragraph()
run = paragraph.add_run(str1)
document.save(gsplit[0] + '.docx')
再将for循环输出的str1写入相应的DOCX文件即可。
成果图片如下: