[原创]解决人员名单横向排序程序
有朋友要网上发公示人员名单,需要按姓氏笔画排序,排序好后,在word文档中一行N个,横向排版,因为人员名单数量太大,手工设置太麻烦,我写了个小程序帮助解决排版问题。PS:
1、程序中的人名均瞎写,需要排序名单自己填就行了。
2、如果感觉还凑合,给点个免费评分呗,谢谢大家!
程序功能:从data.txt中读取姓名并按指定列数横向输出到result.docx文档中
思路:姓氏笔画排序用excel就可以做到,将excel排序好的人名导出到data.txt我写了一个程序帮助排版。
环境:使用python版本是3.9,无需安装任何依赖库(都是默认安装好的库)
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+spacer)
saveword('\r')
for k in range((int(len(data)/nums)*nums),int(len(data)),1):
saveword(data+spacer)
doc.Save()
doc.Close()
word.Quit()
os.startfile(r'result.docx')
写好代码直接下载:
没下载Python,我还是习惯用excel的分列+转置来操作{:301_998:} wycdd 发表于 2022-5-10 12:11
我也是这样操作
因为数据从文本文档中读取,结果也是生成word文档,程序的输入输出问题都解决了,所以,可以将python程序打包成exe,只要给个txt文本文档的输入,他就会产生Word文档的输出,也会很方便 这个太实用了 Thanks♪(・ω・)ノ分享 秋风君 发表于 2022-5-9 13:36
没下载Python,我还是习惯用excel的分列+转置来操作
转置无法解决每行显示人名的数量,尤其是数量特别大(8000左右)的时候
程序可以自定义每行显示多少人名,可以试运行下 mymhcb 发表于 2022-5-9 13:28
这个太实用了 Thanks♪(・ω・)ノ分享
谢谢,有免费评分给一个呗,谢谢! 谢谢分享 赞一个,下载试用 谢谢分享,很实用 多谢分享好资源 秋风君 发表于 2022-5-9 13:36
没下载Python,我还是习惯用excel的分列+转置来操作
我也是这样操作
页:
[1]
2