xmind快速转excel

背景

今日遇到一个需求,需要将xmind导出的文件转为excel,因为免费版无该功能。因为python语言的特性,故决定使用python来做这个工作。

前置条件

  • 安装xmindparser,openpyxl这两个python库
  • 安装python
#安装依赖
pip install xmindparser openpyxl

解决方案

from typing import List, Any
from openpyxl import Workbook
from xmindparser import xmind_to_dict
import datetime


def resolve_path(dict_, lists, title):
    """
    通过递归取出每个主分支下的所有小分支并将其作为一个列表
    :param dict_:
    :param lists:
    :param title:
    :return:
    """
    # 去除title首尾空格
    title = title.strip()
    # 若title为空,则直接取value
    if len(title) == 0:
        concat_title = dict_["title"].strip()
    else:
        concat_title = title + "\t" + dict_["title"].strip()
    # 递归结束条件不再有topics
    if not dict_.__contains__("topics"):
        lists.append(concat_title)
    else:
        for d in dict_["topics"]:
            resolve_path(d, lists, concat_title)


def xmind_to_excel(list_, excel_path):
    wb = Workbook()
    sheet = wb.active

    # 第一行固定的表头标题
    row_header = ["序号", "模块", "功能点", ""]
    for i in range(0, len(row_header)):
        sheet.cell(1, i+1, row_header[i])

    # 增量索引
    index = 0

    for h in range(0, len(list_)):
        lists: List[Any] = []
        resolve_path(list_[h], lists, "")
        # print(lists)
        # print('\n'.join(lists))  # 主分支下的小分支

        for j in range(0, len(lists)):
            # 将主分支下的小分支构成列表
            lists[j] = lists[j].split('\t')
            # print(lists[j])

            for n in range(0, len(lists[j])):
                # 生成第一列的序号
                sheet.cell(j + index + 1+1, 1, j + index + 1)
                sheet.cell(j + index + 1+1, n + 1+1, lists[j][n])
                # 自定义内容,比如:测试点/用例标题、预期结果、实际结果、操作步骤、优先级……
                # 这里为了更加灵活,除序号、模块、功能点的标题固定,其余以【自定义+序号】命名,如:自定义1,需生成Excel表格后手动修改
                if n >= 2:
                    sheet.cell(1, n + 1+1, "自定义" + str(n - 1))
            # 遍历完lists并给增量索引赋值,跳出for j循环,开始for h循环
            if j == len(lists) - 1:
                index += len(lists)
    wb.save(excel_path)


def run(xmind_path):
    # 将XMind转化成字典
    xmind_dict = xmind_to_dict(xmind_path)
    # print("将XMind中所有内容提取出来并转换成列表:", xmind_dict)
    # Excel文件与XMind文件保存在同一目录下
    excel_name = xmind_path.split(
        '\\')[-1].split(".")[0] + '-' + datetime.datetime.now().strftime("%Y%m%d%H%M%S") + '.xlsx'
    excel_path = "\\".join(xmind_path.split('\\')[:-1]) + "\\" + excel_name
    print(excel_path)
    # print("通过切片得到所有分支的内容:", xmind_dict[0]['topic']['topics'])
    xmind_to_excel(xmind_dict[0]['topic']['topics'], excel_path)


if __name__ == '__main__':
    xmind_path_ = r"file_name"
    run(xmind_path_)

通过命令行运行该文件,即可获得转换后的excel

参考资料

Python实现XMind测试用例快速转Excel用例

【原作需要将excel_name变量的最后.xlsx改为.xls,否则会遇到文件损坏无法打开excel】

  • 24
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以使用第三方库openpyxl来将XMind文件换为Excel数据。下面是一个简单的示例代码: ```python import openpyxl from xmindparser import xmind_to_dict def xmind_to_excel(xmind_file, excel_file): # 使用xmindparser库将XMind文件换为字典 xmind_data = xmind_to_dict(xmind_file) # 创建一个新的Excel工作簿 workbook = openpyxl.Workbook() worksheet = workbook.active # 遍历xmind数据,将每个主题写入Excel的单元格 for topic in xmind_data[0]['topic']['topics']: content = topic['title'] # 将主题内容写入Excel的单元格 worksheet.cell(row=len(worksheet['A'])+1, column=1, value=content) # 保存Excel文件 workbook.save(excel_file) # 指定XMind文件和要保存的Excel文件 xmind_file = 'example.xmind' excel_file = 'example.xlsx' # 调用函数进行xmind_to_excel(xmind_file, excel_file) ``` 在这个示例中,我们首先导入openpyxl库和xmindparser库。然后定义了一个名为`xmind_to_excel`的函数来实现换操作。函数中使用`xmind_to_dict`函数将XMind文件换为字典表示的数据。然后,创建一个新的Excel工作簿和工作表,并使用`for`循环遍历xmind数据。在循环中,我们将每个主题的内容写入Excel的单元格。最后,保存Excel文件。 请注意,这只是一个简单的示例代码,具体的换过程可能因XMind文件的结构和需要换的数据格式而有所不同。您可能需要根据您的具体需求进行适当的修改和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值