basfan 发表于 2022-5-9 13:15

[原创]解决人员名单横向排序程序

有朋友要网上发公示人员名单,需要按姓氏笔画排序,排序好后,在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')


写好代码直接下载:




秋风君 发表于 2022-5-9 13:36

没下载Python,我还是习惯用excel的分列+转置来操作{:301_998:}

basfan 发表于 2022-5-21 15:04

wycdd 发表于 2022-5-10 12:11
我也是这样操作

因为数据从文本文档中读取,结果也是生成word文档,程序的输入输出问题都解决了,所以,可以将python程序打包成exe,只要给个txt文本文档的输入,他就会产生Word文档的输出,也会很方便

mymhcb 发表于 2022-5-9 13:28

这个太实用了 Thanks♪(・ω・)ノ分享

basfan 发表于 2022-5-9 13:50

秋风君 发表于 2022-5-9 13:36
没下载Python,我还是习惯用excel的分列+转置来操作

转置无法解决每行显示人名的数量,尤其是数量特别大(8000左右)的时候
程序可以自定义每行显示多少人名,可以试运行下

basfan 发表于 2022-5-9 13:51

mymhcb 发表于 2022-5-9 13:28
这个太实用了 Thanks♪(・ω・)ノ分享

谢谢,有免费评分给一个呗,谢谢!

taxuewuhen 发表于 2022-5-9 14:18

谢谢分享

he58394835 发表于 2022-5-9 14:48

赞一个,下载试用

zhxhwyzh14 发表于 2022-5-9 16:08

谢谢分享,很实用

戰龍在野 发表于 2022-5-9 17:37

多谢分享好资源

wycdd 发表于 2022-5-10 12:11

秋风君 发表于 2022-5-9 13:36
没下载Python,我还是习惯用excel的分列+转置来操作

我也是这样操作
页: [1] 2
查看完整版本: [原创]解决人员名单横向排序程序