【Python将xmind转换为excel】

目录

效果展示

实现步骤

核心代码


效果展示

xmind示例:

GUI界面:

excel结果文件:

实现步骤

1.xmindparser.xmind_to_dict读取xmind文件

2.xlwt写入表格内容保存为excel

3.ttkbootstrap编写GUI交互界面

4.pyinstaller将程序打包为可执行的exe文件(参考文章

核心代码

XmindToExcel类,继承XlwtSetting,设置了表头和表格内容单元格样式

import datetime
import os
import traceback
import xlwt
from xmindparser import xmind_to_dict
from common.log_handle import get_log
from common.path_handle import outputs_path

log = get_log(os.path.split(__file__)[-1])


class XmindToExcel(XlwtSetting):

    def __init__(self, file):
        """将xmind文件转换为excel表格"""
        self.xm = xmind_to_dict(file)[0]['topic']  # 获取xmind topic
        self.workbook = xlwt.Workbook(encoding='utf-8')  # 创建工作簿

    def save(self, name):
        """保存excel"""
        self.workbook.save(name + ".xlsx")

    @staticmethod
    def get_num(value):
        """获取xmind标题数量"""
        try:
            return len(value["topics"])
        except KeyError:
            return 0

    @staticmethod
    def get_title(value):
        """获取xmind标题内容"""
        return value["title"]

    def write_excel(self):
        """遍历xmind内容,写入excel"""
        ws = self.workbook.add_sheet(self.xm["title"], cell_overwrite_ok=True)  # 创建工作表

        head = ["模块", "功能点/测试点"]  # 表头数据
        style_head = self.style_head(ws, [12, 35])  # 表头单元格样式
        for i, v in enumerate(head):  # 写入表头
            ws.write(0, i, v, style_head)

        style_body = self.style_body()  # 表格内容单元格样式
        row = 1  # 表格当前行数,从第二行开始
        try:
            for i, v in enumerate(self.xm["topics"]):  # 遍历模块
                lv1_num = self.get_num(v)  # 一级测试点数量
                mod = self.get_title(v)  # 模块名称
                if lv1_num != 0:
                    for n, val in enumerate(v["topics"]):  # 遍历一级测试点
                        lv2_num = self.get_num(val)  # 二级测试点数量
                        p_lv1 = self.get_title(val)  # 一级测试点名称
                        if lv2_num != 0:
                            for j, p in enumerate(val["topics"]):  # 遍历二级测试点
                                lv3_num = self.get_num(p)  # 三级测试点数量
                                p_lv2 = self.get_title(p)  # 二级测试点名称
                                p_lv1 = self.get_title(val) + '--' + p_lv2  # 拼接测试点
                                if lv3_num != 0:
                                    for k, value in enumerate(p["topics"]):  # 遍历三级测测试点
                                        p_lv3 = self.get_title(value)  # 三级测试点名称
                                        p_lv1 = self.get_title(val) + '--' + self.get_title(p) + '--' + p_lv3  # 拼接测试点
                                        ws.write(row, 0, mod, style_body)  # 写入模块,第一列
                                        ws.write(row, 1, p_lv1, style_body)  # 写入测试点,第二列
                                        row += 1  # 当前行数增加1
                                else:
                                    ws.write(row, 0, mod, style_body)
                                    ws.write(row, 1, p_lv1, style_body)
                                    row += 1
                        else:
                            ws.write(row, 0, mod, style_body)
                            ws.write(row, 1, p_lv1, style_body)
                            row += 1
                else:
                    log.info(f"{mod}无测试点")
                    return
            if not os.path.exists(outputs_path):  # 结果输出文件夹,不存在则创建
                os.makedirs(outputs_path)
            sj = datetime.datetime.now().strftime("%Y-%m-%d %H%M%S")  # 当前时间
            file_name = outputs_path + self.xm["title"] + sj  # 拼接文件名称
            self.save(file_name)  # 保存excel
            log.info(f"excel保存成功【{file_name}】")
            return file_name
        except Exception as err:
            info = f"出了点小问题!\n{repr(err)}\n{traceback.format_exc()}"
            log.error(info)

GUI界面,点击按钮判断文件是否为xmind格式,是则调用XmindToExcel类,转换为excel

import os
import re
from tkinter.filedialog import askopenfilename
import ttkbootstrap as ttk
from ttkbootstrap.dialogs import Messagebox
from common.path_handle import icon_path
from xmind_to_excel import XmindToExcel


class GUI:
    def __init__(self, master):
        """xmind转换为excel的GUI"""
        self.root = master
        self.create_page()  # 调用创建页面元素方法

    def create_page(self):
        # xmind路径标签控件
        lf = ttk.Labelframe(self.root, text="xmind转换为excel", bootstyle='primary')
        lf.pack(padx=20, pady=30)  # 使用pack布局

        # xmind文件选择按钮
        ttk.Button(lf, text="选择文件开始转换", bootstyle='outline', command=self.select_file).pack(padx=2, pady=5)

    def select_file(self):
        """选择xmind文件开始转换"""
        path_file = askopenfilename()
        if path_file:  # 若选择了文件
            if not self.is_xmind(path_file):  # 若文件不是xmind则提示
                Messagebox.show_error(title="哦豁,出错了!", message=f"请选择xmind文件!")
            else:  # 若文件是xmind则转换为excel
                file_name = XmindToExcel(path_file).write_excel()
                Messagebox.show_info(title="恭喜发财!", message=f"excel保存路径:{file_name}")
        else:  # 若关闭对话框未选择文件并且文件不是xmind则提示
            if not self.is_xmind(path_file):
                Messagebox.show_error(title="哦豁,出错了!", message=f"请选择xmind文件!")

    @staticmethod
    def is_xmind(path):
        """判断文件名称是否以xmind结尾"""
        reg_value = '.*\.xmind$'
        xmind_reg = re.match(reg_value, path)
        return xmind_reg


if __name__ == "__main__":
    root = ttk.Window(
        title="XTE",  # 窗口标题
        themename="cyborg",  # 主题
        minsize=(0, 0),  # 窗口最小宽高
        maxsize=(1920, 1080),  # 窗口最大宽高
        alpha=1.0  # 窗口的透明度(0.0--完全透明)
    )
    root.place_window_center()  # 设置窗口居中
    root.resizable(width=False, height=False)  # 将窗口大小设置为不可变
    root.iconbitmap(icon_path)  # 更改GUI的图标
    GUI(root)
    root.mainloop()

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要将Xmind转换Excel测试用例,可以使用Python编程语言进行自动化操作。下面是一个简单的步骤: 1. 安装所需的Python库:首先,需要安装一些Python库以便处理XmindExcel文件。可以使用pip命令安装openpyxl和xmindparser库:`pip install openpyxl xmindparser` 2. 导入所需的库:在Python脚本中,导入openpyxl和xmindparser库以及其他可能需要的库文件: ```python import openpyxl import xmindparser ``` 3. 解析Xmind文件:使用xmindparser库将Xmind文件解析为Python对象,以便进一步处理: ```python xmind_file = xmindparser.load("path_to_xmind_file.xmind") ``` 4. 创建Excel文件和工作表:使用openpyxl库创建一个Excel文件并添加一个工作表: ```python excel_file = openpyxl.Workbook() sheet = excel_file.active ``` 5. 遍历Xmind对象并写入Excel文件:使用循环遍历Xmind对象的各个部分,并将它们写入Excel文件中的相应位置。具体如何遍历和写入将根据Xmind文件的结构而定,以下是一个示例: ```python for topic in xmind_file[0]["topic"]["topics"]: sheet.cell(row=row_num, column=1, value=topic["title"]) for subtopic in topic["topics"]: sheet.cell(row=row_num, column=2, value=subtopic["title"]) row_num += 1 ``` 6. 保存并关闭Excel文件:在完成写入后,使用openpyxl库的save方法将Excel文件保存在磁盘上,并使用close方法关闭文件: ```python excel_file.save("path_to_excel_file.xlsx") excel_file.close() ``` 通过以上步骤,就能够使用PythonXmind转换Excel测试用例。根据实际需求,可能需要进一步处理和调整代码,例如设置样式、添加其他信息等。 ### 回答2: Python可以使用一些库和工具将Xmind格式的思维导图转换Excel测试用例。下面介绍一种常见的方法: 1. 首先,我们需要安装并导入相关库,例如`xlwt`用于创建Excel文件、`xmind`用于读取Xmind文件等。 ```python import xlwt from xmindparser import xmind_to_dict ``` 2. 接下来,我们需要将Xmind文件加载并转换为字典。这可以通过`xmind_to_dict`函数来实现。 ```python xmind_file = 'path/to/xmind_file.xmind' data = xmind_to_dict(xmind_file) ``` 3. 现在,我们可以通过遍历字典中的内容来提取测试用例的相关信息,并将其存储到Excel文件中。 ```python workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 header = ['用例名称', '用例编号', '前置条件', '步骤', '预期结果'] for col, name in enumerate(header): worksheet.write(0, col, name) # 遍历Xmind字典 def parse_xmind(data, row): for item in data: if 'topic' in item: topic = item['topic'] case_name = topic['title'] case_id = topic['id'] precondition = '' # 前置条件 steps = '' # 步骤 expected_result = '' # 预期结果 # 检查是否存在子主题 if 'topics' in topic: for sub_topic in topic['topics']: if 'title' in sub_topic: title = sub_topic['title'] if title == '前置条件': precondition = sub_topic['topics'][0]['title'] elif title == '步骤': for step in sub_topic['topics']: steps += step['topics'][0]['title'] + '\n' elif title == '预期结果': for result in sub_topic['topics']: expected_result += result['topics'][0]['title'] + '\n' # 将用例信息写入Excel worksheet.write(row, 0, case_name) worksheet.write(row, 1, case_id) worksheet.write(row, 2, precondition) worksheet.write(row, 3, steps) worksheet.write(row, 4, expected_result) row += 1 # 递归处理子主题 if 'topics' in topic: row = parse_xmind(topic['topics'], row) return row # 开始处理Xmind数据 row = parse_xmind(data, 1) # 保存Excel文件 workbook.save('path/to/test_cases.xls') ``` 以上是将Xmind转换Excel测试用例的一个简单示例。通过解析Xmind文件的层级结构,并针对每个主题提取相应的信息,我们可以轻松地生成Excel文件,其中包含测试用例的名称、编号、前置条件、步骤和预期结果等内容。 ### 回答3: Python提供了丰富的第三方库和工具,可以帮助我们实现将XMind转换Excel测试用例的功能。下面是一个简单的示例代码,用于将XMind文件中的测试用例转换Excel格式: 1. 首先,我们需要使用Python中的xlwt库来创建Excel文件并写入测试用例数据。 ```python import xlwt from xmindparser import xmind_to_dict def convert_xmind_to_excel(xmind_file, excel_file): # 读取XMind文件 workbook_dict = xmind_to_dict(xmind_file) # 创建Excel文件 workbook = xlwt.Workbook() worksheet = workbook.add_sheet('Test Cases') # 写入表头 headers = ['Test Case ID', 'Test Case Name', 'Steps', 'Expected Result'] for index, header in enumerate(headers): worksheet.write(0, index, header) # 写入测试用例数据 row = 1 for sheet in workbook_dict['sheets']: for topic in sheet['rootTopic']['topics']: test_case_id = topic['title'] test_case_name = topic['topics'][0]['title'] steps = topic['topics'][0]['topics'][0]['title'] expected_result = topic['topics'][0]['topics'][0]['topics'][0]['title'] worksheet.write(row, 0, test_case_id) worksheet.write(row, 1, test_case_name) worksheet.write(row, 2, steps) worksheet.write(row, 3, expected_result) row += 1 # 保存Excel文件 workbook.save(excel_file) ``` 2. 在上述代码中,我们使用了`xmindparser`库来解析XMind文件,需要使用`pip install xmindparser`命令来安装该库。 3. `convert_xmind_to_excel`函数接受两个参数,分别是XMind文件路径以及要保存的Excel文件路径。 4. 函数首先使用`xmind_to_dict`函数将XMind文件解析成一个字典,然后创建一个Excel对象。 5. 接下来,我们按照Excel的格式,将测试用例的数据逐行写入Excel文件,包括测试用例ID、名称、步骤和预期结果。 6. 最后,使用`workbook.save(excel_file)`保存Excel文件。 通过以上代码,我们可以将XMind文件中的测试用例转换Excel格式,方便进行测试用例管理和执行。当然,根据实际需求,还可以根据XMind文件的结构进行更复杂的操作,例如解析不同分支、处理更多层级的数据等。可以根据具体情况对代码进行适当的优化和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值