有朋友要网上发公示人员名单,需要按姓氏笔画排序,排序好后,在word文档中一行N个,横向排版,因为人员名单数量太大,手工设置太麻烦,我写了个小程序帮助解决排版问题。
PS:
1、程序中的人名均瞎写,需要排序名单自己填就行了。
2、如果感觉还凑合,给点个免费评分呗,谢谢大家!
程序功能:从data.txt中读取姓名并按指定列数横向输出到result.docx文档中
思路:姓氏笔画排序用excel就可以做到,将excel排序好的人名导出到data.txt我写了一个程序帮助排版。
环境:使用python版本是3.9,无需安装任何依赖库(都是默认安装好的库)
[Python] 纯文本查看 复制代码
import win32com
from win32com.client import Dispatch, constants
import os
def getdata():
if os.path.isfile(r'data.txt'):
file = open("data.txt",'r',encoding='utf-8')
text=file.readline()
data=text.split(',')
file.close()
return data
else:
print('数据文件不存在,程序被迫终止执行!')
print('请将数据文件存放在本程序的data.txt文件中,并以英文状态下“,”分割')
quit()
def saveword(text):
myRange = doc.Range()
myRange.Style.Font.Name='宋体'
myRange.Style.Font.Size=14 #10.5对应五号字,12对应小四号字,14四号字
myRange.InsertAfter(text)
if __name__ == '__main__':
data=getdata()
nums=int(input('请输入每行显示姓名个数:'))
spacer=input('请输入姓名之间的间隔符(回车默认是空格):')
word = Dispatch('Word.Application')
word.Visible = 0 # 0:后台运行 1:前台运行(可见)
word.DisplayAlerts = 0 # 不显示,不警告
if os.path.isfile(r'result.docx'):
doc = word.Documents.Open(os.getcwd() + "\\result.docx")
else:
doc = word.Documents.Add()
doc.SaveAs(os.getcwd() + "\\result.docx")
if spacer == '':
spacer=' '
for i in range(int(len(data)/nums)):
for j in range(nums):
if(i*nums+j)<len(data):
saveword(data[i*nums+j]+spacer)
saveword('\r')
for k in range((int(len(data)/nums)*nums),int(len(data)),1):
saveword(data[k]+spacer)
doc.Save()
doc.Close()
word.Quit()
os.startfile(r'result.docx')
写好代码直接下载:
解决人员名单横向排版问题.rar
(1.23 KB, 下载次数: 36)
|