v0.19
This commit is contained in:
154
need/threads.py
Normal file
154
need/threads.py
Normal file
@@ -0,0 +1,154 @@
|
||||
import pythoncom
|
||||
from PyQt5 import QtCore
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
from win32com.client import DispatchEx
|
||||
from pathlib import *
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
from docxtpl import DocxTemplate
|
||||
|
||||
class create_bujian(QtCore.QThread):
|
||||
sin_out = pyqtSignal(str)
|
||||
|
||||
def __init__(self,parent):
|
||||
super().__init__()
|
||||
self.parent = parent
|
||||
|
||||
def run(self):
|
||||
self.sin_out.emit("进入部件测试获取调用函数线程......")
|
||||
self.sin_out.emit("开始填写文档......")
|
||||
|
||||
#如果没有选择路径则退出
|
||||
if not self.parent.open_file_name:
|
||||
self.sin_out.emit('nofile')
|
||||
self.parent.tabWidget.setEnabled(True)
|
||||
return
|
||||
|
||||
#告诉windows单线程
|
||||
pythoncom.CoInitialize()
|
||||
#在用户选择的目录中查找UAS单位测试报告文档
|
||||
self.sin_out.emit('打开单元测试原文件...')
|
||||
|
||||
#使用win32com打开-记得关闭
|
||||
#打开word应用
|
||||
self.w = DispatchEx('Word.Application')
|
||||
#self.w.visible=True
|
||||
self.w.DisplayAlerts = 0
|
||||
try:
|
||||
bujianfile = self.w.Documents.Open(self.parent.open_file_name[0])
|
||||
except:
|
||||
self.sin_out.emit('open failed:选择的文档')
|
||||
self.w.Quit()
|
||||
pythoncom.CoUninitialize()
|
||||
self.parent.tabWidget.setEnabled(True)
|
||||
return
|
||||
|
||||
curpath = Path.cwd() / 'need'
|
||||
danyuan_file_tmp = curpath / 'document_templates' / '部件桩函数工具1.docx'
|
||||
print(danyuan_file_tmp)
|
||||
|
||||
if danyuan_file_tmp.is_file():
|
||||
self.sin_out.emit('已检测到有部件模板文件...')
|
||||
else:
|
||||
self.sin_out.emit('open failed:选择的文档')
|
||||
return
|
||||
|
||||
#创建个列表放数据-important
|
||||
data_list = []
|
||||
|
||||
#try统计表格数量
|
||||
try:
|
||||
csx_tb_count = bujianfile.Tables.Count
|
||||
self.sin_out.emit('total:'+ str(csx_tb_count))
|
||||
self.sin_out.emit("正在调用word文档操作接口,可能会有点慢...")
|
||||
except:
|
||||
self.sin_out.emit('不存在表格!')
|
||||
QMessageBox.warning(self.parent,'出错了','测试说明文档格式错误或者没有正确表格')
|
||||
try:
|
||||
bujianfile.Close()
|
||||
except:
|
||||
pass
|
||||
self.w.Quit()
|
||||
pythoncom.CoUninitialize()
|
||||
self.parent.tabWidget.setEnabled(True)
|
||||
return
|
||||
|
||||
#开始处理表格-important
|
||||
#我先统计有多少个生成的表格-即用例有多少个呗
|
||||
yongli_count = 0
|
||||
for i in range(csx_tb_count):
|
||||
if bujianfile.Tables[i].Rows.Count > 2:
|
||||
#注意win32com的Cell从1开始不是从0开始
|
||||
if bujianfile.Tables[i].Cell(1, 1).Range.Text.find('用例名称') != -1:
|
||||
yongli_count += 1
|
||||
|
||||
|
||||
yongli_num = 0
|
||||
hanshuming_duibi = ''
|
||||
alowFunctionInject = True
|
||||
for i in range(csx_tb_count):
|
||||
self.sin_out.emit(str(i))
|
||||
#准备填入的data
|
||||
data = {'functionName':'','subitem':[]}
|
||||
|
||||
#找到函数名,这里容易出问题~~~~~~~~~~~~~~~~
|
||||
if bujianfile.Tables[i].Rows.Count > 2:
|
||||
if bujianfile.Tables[i].Cell(1, 1).Range.Text.find('功能描述') != -1:
|
||||
bujianfile.Tables[i].Cell(1, 1).Range.Select()
|
||||
self.w.Selection.MoveUp()
|
||||
self.w.Selection.MoveUp()
|
||||
self.w.Selection.MoveUp()
|
||||
s = self.w.Selection.Paragraphs(1).Range.Text[:-1]
|
||||
s1 = s.split(". ")[-1]
|
||||
#放入函数名比对
|
||||
data['functionName'] = s1
|
||||
data_list.append(data)
|
||||
yongli_num += 1 #用例创建加一
|
||||
|
||||
#找章节号~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
if bujianfile.Tables[i].Rows.Count > 2:
|
||||
if bujianfile.Tables[i].Cell(1, 1).Range.Text.find('用例名称') != -1:
|
||||
#函数名获取
|
||||
if s1 != hanshuming_duibi:
|
||||
hanshuming_duibi = s1
|
||||
alowFunctionInject = True
|
||||
else:
|
||||
alowFunctionInject = False
|
||||
|
||||
elif bujianfile.Tables[i].Cell(1, 2).Range.Text.find('定义') != -1:
|
||||
#定义个桩函数dict
|
||||
if alowFunctionInject == True:
|
||||
temp = bujianfile.Tables[i].Cell(1, 3).Range.Text[:-2]
|
||||
temp1 = temp.split("(")[0]
|
||||
temp2 = temp1.split(" ")[-1]
|
||||
data_list[yongli_num - 1]['subitem'].append(temp2)
|
||||
|
||||
|
||||
print('最后data_list',data_list)
|
||||
#最后关闭文档
|
||||
try:
|
||||
self.w.Quit()
|
||||
pythoncom.CoUninitialize()
|
||||
self.parent.tabWidget.setEnabled(True)
|
||||
except:
|
||||
QMessageBox.warning(self.parent,"关闭文档失败","关闭文档失败!")
|
||||
return
|
||||
|
||||
try:
|
||||
tpl_path = Path.cwd() / "need" / "document_templates" / "部件桩函数工具1.docx"
|
||||
self.sin_out.emit('导入模板文件路径为:' + str(tpl_path))
|
||||
tpl = DocxTemplate(tpl_path) #模板导入成功
|
||||
except:
|
||||
QMessageBox.warning(self.parent,"出错了","导入模板出错请检查模板文件是否存在或名字不正确")
|
||||
return
|
||||
|
||||
#开始渲染模板文件
|
||||
try:
|
||||
context = {
|
||||
"tables":data_list,
|
||||
}
|
||||
tpl.render(context)
|
||||
tpl.save("部件提起调用函数表格.docx")
|
||||
self.sin_out.emit('stopsuccess')
|
||||
except:
|
||||
self.sin_out.emit('stoperror')
|
||||
return
|
||||
Reference in New Issue
Block a user