持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
有时候需要请假,很多时候请假的模板是真的需要花费时间来制作,于是呢一款自动生成word格式的申请单就显得非常重要了。
使用PyQT设计的界面非常简单,布局如下,只需要在界面中填写自己的基本信息,然后点击提交即可一键生成需要的模板,而且模板的格式还可以在代码中进行微调。
界面代码如下
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(423, 517)
self.formLayoutWidget = QtWidgets.QWidget(Form)
self.formLayoutWidget.setGeometry(QtCore.QRect(30, 70, 351, 411))
self.formLayoutWidget.setObjectName("formLayoutWidget")
self.formLayout = QtWidgets.QFormLayout(self.formLayoutWidget)
self.formLayout.setContentsMargins(0, 0, 0, 0)
self.formLayout.setObjectName("formLayout")
self.label = QtWidgets.QLabel(self.formLayoutWidget)
self.label.setObjectName("label")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
self.lineEdit = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit.setObjectName("lineEdit")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
self.label_2 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.lineEdit_2 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_2.setObjectName("lineEdit_2")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
self.label_3 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.lineEdit_3 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_3.setObjectName("lineEdit_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.lineEdit_3)
self.label_4 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_4)
self.lineEdit_4 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_4.setObjectName("lineEdit_4")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.lineEdit_4)
self.label_5 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_5.setObjectName("label_5")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.label_5)
self.lineEdit_5 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_5.setObjectName("lineEdit_5")
self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.lineEdit_5)
self.label_6 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_6.setObjectName("label_6")
self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.label_6)
self.lineEdit_6 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_6.setObjectName("lineEdit_6")
self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.lineEdit_6)
self.label_7 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_7.setObjectName("label_7")
self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.label_7)
self.lineEdit_7 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_7.setObjectName("lineEdit_7")
self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.lineEdit_7)
self.label_8 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_8.setObjectName("label_8")
self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.label_8)
self.lineEdit_8 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_8.setObjectName("lineEdit_8")
self.formLayout.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.lineEdit_8)
self.label_9 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_9.setObjectName("label_9")
self.formLayout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.label_9)
self.lineEdit_9 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_9.setObjectName("lineEdit_9")
self.formLayout.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.lineEdit_9)
self.label_10 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_10.setObjectName("label_10")
self.formLayout.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.label_10)
self.lineEdit_10 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_10.setObjectName("lineEdit_10")
self.formLayout.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.lineEdit_10)
self.label_11 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_11.setObjectName("label_11")
self.formLayout.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.label_11)
self.lineEdit_11 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_11.setObjectName("lineEdit_11")
self.formLayout.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.lineEdit_11)
self.label_12 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_12.setObjectName("label_12")
self.formLayout.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.label_12)
self.lineEdit_12 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_12.setObjectName("lineEdit_12")
self.formLayout.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.lineEdit_12)
self.label_13 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_13.setObjectName("label_13")
self.formLayout.setWidget(12, QtWidgets.QFormLayout.LabelRole, self.label_13)
self.lineEdit_13 = QtWidgets.QLineEdit(self.formLayoutWidget)
self.lineEdit_13.setObjectName("lineEdit_13")
self.formLayout.setWidget(12, QtWidgets.QFormLayout.FieldRole, self.lineEdit_13)
self.label_14 = QtWidgets.QLabel(self.formLayoutWidget)
self.label_14.setObjectName("label_14")
self.formLayout.setWidget(13, QtWidgets.QFormLayout.LabelRole, self.label_14)
self.textEdit = QtWidgets.QTextEdit(self.formLayoutWidget)
self.textEdit.setObjectName("textEdit")
self.formLayout.setWidget(13, QtWidgets.QFormLayout.FieldRole, self.textEdit)
self.label_15 = QtWidgets.QLabel(Form)
self.label_15.setGeometry(QtCore.QRect(40, 10, 351, 51))
font = QtGui.QFont()
font.setPointSize(16)
self.label_15.setFont(font)
self.label_15.setAlignment(QtCore.Qt.AlignCenter)
self.label_15.setObjectName("label_15")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(170, 490, 75, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
self.pushButton.clicked.connect(Form.submit)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "姓名:"))
self.label_2.setText(_translate("Form", "院系:"))
self.label_3.setText(_translate("Form", "专业:"))
self.label_4.setText(_translate("Form", "事项:"))
self.label_5.setText(_translate("Form", "性别:"))
self.label_6.setText(_translate("Form", "学号:"))
self.label_7.setText(_translate("Form", "在校起始年:"))
self.label_8.setText(_translate("Form", "在校起始月:"))
self.label_9.setText(_translate("Form", "在校截至年:"))
self.label_10.setText(_translate("Form", "在校截至月:"))
self.label_11.setText(_translate("Form", "家庭通讯地址:"))
self.label_12.setText(_translate("Form", "个人联系方式:"))
self.label_13.setText(_translate("Form", "家庭联系方式:"))
self.label_14.setText(_translate("Form", "本人申请理由:"))
self.label_15.setText(_translate("Form", "word模板生成器"))
self.pushButton.setText(_translate("Form", "提交"))
主处理代码如下
from untitled import Ui_Form
from docx import Document
from docx.shared import Inches, Pt
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
import time,datetime
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class MainWindow(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self)
def submit(self):
name = self.lineEdit.text()
departments = self.lineEdit_2.text()
specialty = self.lineEdit_3.text()
class_name = self.lineEdit_4.text()
gender = self.lineEdit_5.text()
school_num = self.lineEdit_6.text()
school_time_year = self.lineEdit_7.text()
school_time_month = self.lineEdit_8.text()
school_time_year1 = self.lineEdit_9.text()
school_time_month1 = self.lineEdit_10.text()
home_address = self.lineEdit_11.text()
personal_tel = self.lineEdit_12.text()
home_num = self.lineEdit_13.text()
reason = self.textEdit.toPlainText()
nt = datetime.datetime.now()
document = Document()
document.styles['Normal'].font.name = u'宋体'
document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
p = document.add_paragraph()
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
r = p.add_run(departments + '\r' + class_name + "申请表")
r.font.size = Pt(16)
r.bold = True
table = document.add_table(rows=37, cols=13, style='Table Grid')
table.autofit = False
table.columns[0].width = Inches(0.49)
table.cell(0, 0).merge(table.cell(2, 2))
table.cell(0, 3).merge(table.cell(2, 6))
table.cell(0, 7).merge(table.cell(2, 9))
table.cell(0, 10).merge(table.cell(2, 12))
table.cell(3, 0).merge(table.cell(5, 2))
table.cell(3, 3).merge(table.cell(5, 5))
table.cell(3, 6).merge(table.cell(5, 6))
table.cell(3, 7).merge(table.cell(5, 9))
table.cell(3, 10).merge(table.cell(5, 10))
table.cell(3, 11).merge(table.cell(5, 12))
table.cell(6, 0).merge(table.cell(8, 2))
table.cell(6, 3).merge(table.cell(8, 12))
table.cell(9, 0).merge(table.cell(14, 2))
table.cell(9, 3).merge(table.cell(14, 6))
table.cell(9, 7).merge(table.cell(11, 9))
table.cell(12, 7).merge(table.cell(14, 9))
table.cell(9, 10).merge(table.cell(11, 12))
table.cell(12, 10).merge(table.cell(14, 12))
table.cell(15, 0).merge(table.cell(20, 2))
table.cell(15, 3).merge(table.cell(20, 12))
table.cell(21, 0).merge(table.cell(26, 2))
table.cell(21, 3).merge(table.cell(26, 12))
table.cell(27, 0).merge(table.cell(31, 2))
table.cell(27, 3).merge(table.cell(31, 12))
table.cell(32, 0).merge(table.cell(36, 2))
table.cell(32, 3).merge(table.cell(36, 12))
hdr_cells0 = table.rows[0].cells
hdr_cells3 = table.rows[3].cells
hdr_cells6 = table.rows[6].cells
hdr_cells9 = table.rows[9].cells
hdr_cells12 = table.rows[12].cells
hdr_cells15 = table.rows[15].cells
hdr_cells21 = table.rows[21].cells
hdr_cells27 = table.rows[27].cells
hdr_cells32 = table.rows[32].cells
hdr_cells0[0].add_paragraph('院(系)\n').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells0[3].add_paragraph(departments + '院').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells0[7].add_paragraph('专业班级').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells0[10].add_paragraph(specialty).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[0].add_paragraph('姓名\n').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[3].add_paragraph(name).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[6].add_paragraph('性别').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[7].add_paragraph(gender).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[10].add_paragraph('学号').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells3[11].add_paragraph(school_num).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells6[0].add_paragraph('在校时间\n').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells6[3].add_paragraph(
school_time_year + '年' + school_time_month + '月——' + school_time_year1 + '年' + school_time_month1 + '月').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells9[0].add_paragraph('家庭通讯地址').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells9[3].add_paragraph(home_address).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells9[7].add_paragraph('家庭联系方式').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells12[7].add_paragraph('个人联系方式').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells9[10].add_paragraph(home_num).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells12[10].add_paragraph(personal_tel).alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells15[0].add_paragraph('\n\n本人申请理由').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells15[3].add_paragraph(reason + '\n\n学生本人签名:' + '\n\n\t\t年\t月\t日').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells21[0].add_paragraph('\n\n院系领导意见').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells21[3].add_paragraph('\n\n领导签字:' + '\n\n\t\t年\t月\t日').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells27[0].add_paragraph('\n\n学生处意见').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells27[3].add_paragraph('\n\n领导签字:' + '\n\n\t\t年\t月\t日').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells32[0].add_paragraph('\n\n主管校领导审批').alignment = WD_ALIGN_PARAGRAPH.CENTER
hdr_cells32[3].add_paragraph('\n\n领导签字:' + '\n\n\t\t年\t月\t日').alignment = WD_ALIGN_PARAGRAPH.CENTER
document.save(name + '申请表.docx')
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
运行代码,在编辑框中依次输入下面的信息。
点击提交后可以得到下面的word文档,直接生成了完整的格式,避免我们在word中反复调整。