Files
CTToolsOld/need/fpga_record_thrend.py
2026-01-28 16:57:46 +08:00

155 lines
7.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pythoncom
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSignal
from pathlib import *
from docx import Document
import re
from docx.shared import Pt
#常量
TABLE_FONT_SIZE = Pt(10.5)
class create_FPGA_record(QtCore.QThread):
sin_out = pyqtSignal(str)
def __init__(self,parent):
super().__init__()
self.parent = parent
def run(self):
self.sin_out.emit("开始填写FPGA记录......")
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('打开单元测试原文件...')
try:
doc = Document(self.parent.open_file_name[0])
except:
self.sin_out.emit('open failed:选择的文档')
pythoncom.CoUninitialize()
self.parent.tabWidget.setEnabled(True)
return
table_count = len(doc.tables)
self.sin_out.emit('total:'+ str(table_count))
# 如果大纲标识一致需要累加
static_dagang_biaoshi = ''
index = 1
num = 0
for table in doc.tables:
num += 1
self.sin_out.emit(str(num))
self.sin_out.emit(f'正在处理第{num}个表格')
if table.cell(0,0).text == '测试用例名称':
try:
#~~~~~~~~~~~~~~~第一步处理表格中所在标题填入~~~~~~~~~~~~~~~
prev_para = table._element.getprevious()
# 如果找到前一个元素是paragraph、但没有找到子节点有pStyle节点则再往上找
while prev_para is not None and prev_para.tag.endswith('}p') and \
len(prev_para.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}pStyle')) == 0:
prev_para = prev_para.getprevious()
if prev_para is not None and prev_para.tag.endswith('}p'):
t_ele = prev_para.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}t')
title = ''
for i in range(len(t_ele)):
title = title + t_ele[i].text
# 将title放入到cell(0,1)-完成第一步了
table.cell(0,3).text = title
#~~~~~~~~~~~~~~~第二步找到追踪关系中大纲标识更改后填入~~~~~~~~~~~~~~~(要求用户必须3行)
temp = table.cell(1,3).text.split("\n")[-1]
dagang_biaoshi = re.split('[:]',temp)[-1]
# 如果大纲标识一致,则累加
if dagang_biaoshi != static_dagang_biaoshi:
static_dagang_biaoshi = dagang_biaoshi
yongli_biaoshi = dagang_biaoshi.replace('XQ','R1_YL') + '_001'
# 填入标识
table.cell(0,8).text = yongli_biaoshi
index = 1
else:
index += 1
if len(str(index)) <= 3:
str_index = (3-len(str(index)))*'0' + str(index)
yongli_biaoshi = dagang_biaoshi.replace('XQ','R1_YL') + '_' + str_index
table.cell(0,8).text = yongli_biaoshi
#~~~~~~~~~~~~~~~输出用户知道~~~~~~~~~~~~~~~
self.sin_out.emit(f'处理完毕测试项:{title},{yongli_biaoshi}')
#~~~~~~~~~~~~~~~第三步填写“测试用例综述”~~~~~~~~~~~~~~~
if title:
zongsu_string = f'使用功能仿真的方法,对{title}进行测试'
table.cell(2,3).text = zongsu_string
else:
print('注意:未识别到正确标题!,填入综述失败')
#~~~~~~~~~~~~~~~第四步“执行状态”填写为已执行、“测试时间”、“测试人员”、“监测人员”为可更改项~~~~~~~~~~~~~~~
#执行状态-固定!
table.rows[-4].cells[2].text = '已执行'
#测试人员
table.rows[-3].cells[2].text = self.parent.lineEdit_8.text()
table.rows[-4].cells[7].text = self.parent.lineEdit_7.text()
table.rows[-3].cells[7].text = self.parent.lineEdit_15.text()
#~~~~~~~~~~~~~~~第五步填写当通过与否为通过时,写"/"~~~~~~~~~~~~~~~
table.rows[-2].cells[2].text = '/'
# 判断有几个步骤-根据总行数判断,并循环查看是否为通过
flag = 1
for i in range(len(table.rows) - 12):
temp = table.rows[-6 - i].cells[-1].text
if temp == '不通过':
flag = 0
if temp == '未通过':
flag = 0
if flag == 1:
table.rows[-2].cells[2].text = '/'
else:
project_code = self.parent.lineEdit_16.text()
pro_biaoshi = f'PT_{project_code}_'
table.rows[-2].cells[2].text = pro_biaoshi
#~~~~~~~~~~~~~~~第六步截图为空填写‘/’否则不变~~~~~~~~~~~~~~~
cell = table.cell(-5,0)
has_image = False
for paragraph in cell.paragraphs:
tupian_list = paragraph._element.findall('.//{http://schemas.openxmlformats.org/wordprocessingml/2006/main}drawing')
if len(tupian_list) != 0:
has_image = True
if has_image:
pass
else:
table.cell(-5,0).text = '/'
except:
self.sin_out.emit(f'{num}个表格处理失败,请查看!!!')
pass
# 设置字体
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.size = TABLE_FONT_SIZE
# 保存文档
try:
doc.save('~新生产的fpga记录~.docx')
self.sin_out.emit('stopsuccess')
except:
self.sin_out.emit('stoperror')
return