将 Markdown 表格结构转换为Excel 文件

在数据管理和文档编写过程中,我们经常使用 Markdown 来记录表格数据。然而,Markdown 格式的表格在实际应用中不如 Excel 方便,特别是需要进一步处理数据时。因此,我们开发了一个使用 wxPython 的 GUI 工具,将 Markdown 表格结构转换为 Excel 文件。
C:\pythoncode\new\MarkdownToExcel.py
在这里插入图片描述

所有代码

import wx
import re
import openpyxl
import loggingclass MarkdownToExcelApp(wx.Frame):def __init__(self):super().__init__(parent=None, title='Markdown 转 Excel', size=(800, 600))# 配置日志logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s',filename='markdown_to_excel_debug.log',filemode='w')# 创建面板panel = wx.Panel(self)# 创建垂直布局main_sizer = wx.BoxSizer(wx.VERTICAL)# 输入标签input_label = wx.StaticText(panel, label='请输入Markdown表格结构:')main_sizer.Add(input_label, 0, wx.ALL | wx.EXPAND, 10)# 输入文本框self.input_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE)main_sizer.Add(self.input_text, 1, wx.ALL | wx.EXPAND, 10)# 转换按钮convert_btn = wx.Button(panel, label='转换为Excel')convert_btn.Bind(wx.EVT_BUTTON, self.on_convert)main_sizer.Add(convert_btn, 0, wx.ALL | wx.CENTER, 10)# 日志文本框self.log_text = wx.TextCtrl(panel, style=wx.TE_MULTILINE | wx.TE_READONLY)main_sizer.Add(self.log_text, 1, wx.ALL | wx.EXPAND, 10)# 设置面板的布局panel.SetSizer(main_sizer)# 创建菜单栏menubar = wx.MenuBar()file_menu = wx.Menu()exit_item = file_menu.Append(wx.ID_EXIT, '退出', '退出应用程序')menubar.Append(file_menu, '文件')self.SetMenuBar(menubar)# 绑定菜单事件self.Bind(wx.EVT_MENU, self.on_exit, exit_item)# 居中显示self.Centre()def log_and_display(self, message):"""记录日志并在界面显示"""logging.debug(message)self.log_text.AppendText(message + '\n')def parse_markdown_structure(self, markdown_text):"""解析Markdown表格结构"""self.log_and_display("开始解析Markdown表格结构")# 存储表格信息的字典table_structure = {}# 按表格分割table_blocks = markdown_text.split('* **')for block in table_blocks[1:]:  # 跳过第一个空元素# 分割表格名称和字段lines = block.split('\n')table_name = lines[0].strip()# 提取字段fields = []for line in lines[1:]:line = line.strip()if line.startswith('* '):# 移除 '* ' 前缀fields.append(line[2:].strip())self.log_and_display(f"表格: {table_name}")self.log_and_display(f"字段: {fields}")# 存储表格结构table_structure[table_name] = fieldsself.log_and_display(f"解析完成,总表格数: {len(table_structure)}")return table_structuredef on_convert(self, event):"""转换Markdown结构到Excel"""# 清空之前的日志self.log_text.Clear()markdown_text = self.input_text.GetValue()if not markdown_text.strip():wx.MessageBox('请输入Markdown表格结构', '错误', wx.OK | wx.ICON_ERROR)returntry:# 解析Markdown结构table_structure = self.parse_markdown_structure(markdown_text)# 创建工作簿wb = openpyxl.Workbook()# 为每个表格创建sheetfirst_sheet = Truefor table_name, fields in table_structure.items():self.log_and_display(f"创建sheet: {table_name}")if first_sheet:# 重命名第一个sheetws = wb.activews.title = table_name.split(' ')[0][:31]  # Excel sheet名称长度限制first_sheet = Falseelse:ws = wb.create_sheet(title=table_name.split(' ')[0][:31])# 写入表头for col, field in enumerate(fields, start=1):ws.cell(row=1, column=col, value=field)# 添加一个示例行(可选)for col, field in enumerate(fields, start=1):ws.cell(row=2, column=col, value=f"示例{field}")# 保存文件save_dialog = wx.FileDialog(self, "保存Excel文件", wildcard="Excel文件 (*.xlsx)|*.xlsx", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)if save_dialog.ShowModal() == wx.ID_OK:filename = save_dialog.GetPath()wb.save(filename)self.log_and_display(f'Excel文件已保存:{filename}')wx.MessageBox(f'Excel文件已保存:{filename}', '成功', wx.OK | wx.ICON_INFORMATION)save_dialog.Destroy()except Exception as e:error_msg = f'转换出错:{str(e)}'self.log_and_display(error_msg)wx.MessageBox(error_msg, '错误', wx.OK | wx.ICON_ERROR)def on_exit(self, event):"""退出应用程序"""self.Close(True)def main():app = wx.App()frame = MarkdownToExcelApp()frame.Show()app.MainLoop()if __name__ == '__main__':main()

1. 项目概述

本项目提供一个图形界面,用户可以输入 Markdown 格式的表格结构,程序解析后生成 Excel 文件。该应用具备以下功能:

  • 支持 Markdown 格式的表格结构解析。
  • 生成 Excel 文件,每个表格对应一个工作表。
  • 记录日志,方便调试。
  • 提供 GUI 界面,用户体验友好。

2. 代码解析

2.1 依赖库
import wx
import re
import openpyxl
import logging
  • wx 用于创建 GUI 界面。
  • re 用于正则表达式解析 Markdown 表格。
  • openpyxl 用于创建 Excel 文件。
  • logging 记录调试信息。
2.2 GUI 设计
class MarkdownToExcelApp(wx.Frame):def __init__(self):super().__init__(parent=None, title='Markdown 转 Excel', size=(800, 600))
  • wx.Frame 创建主窗口,标题为“Markdown 转 Excel”。
  • 设置窗口大小为 800x600。
# 配置日志
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s',filename='markdown_to_excel_debug.log',filemode='w')
  • 记录日志到 markdown_to_excel_debug.log,用于调试。
# 创建面板
panel = wx.Panel(self)
# 创建垂直布局
main_sizer = wx.BoxSizer(wx.VERTICAL)
  • wx.Panel 是 GUI 的容器。
  • wx.BoxSizer(wx.VERTICAL) 采用垂直布局管理组件。
2.3 解析 Markdown 结构
def parse_markdown_structure(self, markdown_text):self.log_and_display("开始解析Markdown表格结构")table_structure = {}table_blocks = markdown_text.split('* **')for block in table_blocks[1:]:lines = block.split('\n')table_name = lines[0].strip()fields = [line[2:].strip() for line in lines[1:] if line.startswith('* ')]self.log_and_display(f"表格: {table_name}")self.log_and_display(f"字段: {fields}")table_structure[table_name] = fieldsself.log_and_display(f"解析完成,总表格数: {len(table_structure)}")return table_structure
  • split('* **') 将 Markdown 文本按表格名称分割。
  • 逐行解析字段。
  • 记录日志信息。
2.4 生成 Excel
def on_convert(self, event):markdown_text = self.input_text.GetValue()if not markdown_text.strip():wx.MessageBox('请输入Markdown表格结构', '错误', wx.OK | wx.ICON_ERROR)returntry:table_structure = self.parse_markdown_structure(markdown_text)wb = openpyxl.Workbook()first_sheet = Truefor table_name, fields in table_structure.items():ws = wb.active if first_sheet else wb.create_sheet(title=table_name.split(' ')[0][:31])first_sheet = Falsefor col, field in enumerate(fields, start=1):ws.cell(row=1, column=col, value=field)ws.cell(row=2, column=col, value=f"示例{field}")save_dialog = wx.FileDialog(self, "保存Excel文件", wildcard="Excel文件 (*.xlsx)|*.xlsx", style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)if save_dialog.ShowModal() == wx.ID_OK:filename = save_dialog.GetPath()wb.save(filename)self.log_and_display(f'Excel文件已保存:{filename}')wx.MessageBox(f'Excel文件已保存:{filename}', '成功', wx.OK | wx.ICON_INFORMATION)except Exception as e:self.log_and_display(f'转换出错:{str(e)}')wx.MessageBox(f'转换出错:{str(e)}', '错误', wx.OK | wx.ICON_ERROR)
  • openpyxl.Workbook() 创建 Excel 文件。
  • create_sheet() 创建多个表格,每个表格对应一个工作表。
  • wx.FileDialog 让用户选择文件保存路径。
  • logging 记录转换过程。
2.5 退出应用
def on_exit(self, event):self.Close(True)
  • 关闭应用。

3. 运行程序

def main():app = wx.App()frame = MarkdownToExcelApp()frame.Show()app.MainLoop()if __name__ == '__main__':main()
  • 启动 wxPython GUI。

4. 总结

本项目通过 wxPython 构建用户界面,并结合 openpyxl 解析 Markdown 表格并生成 Excel 文件。它适用于希望从 Markdown 结构化数据导出 Excel 的用户,简化了手动整理表格的过程。

你可以进一步优化该项目,如:

  • 增加 Markdown 语法校验。
  • 允许用户调整 Excel 文件格式。
  • 增加数据预览功能。

运行结果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang使用 ip2region 查询IP的地区信息

利用 ip2region 进行 IP 地址定位 import ("fmt""log""github.com/lionsoul2014/ip2region/binding/golang/xdb" )func main() {ip : "213.118.179.98"dbPath : ".\\cmd\\ip\\ip2region.xdb"// 1、初始化查询器//searcher,…

对匿名认证的理解

概述:在 Spring Security 中,** 匿名认证(Anonymous Authentication)** 是一种特殊的认证机制,用于处理未提供有效凭证的请求。 匿名认证的本质 目的:允许未认证用户访问特定资源。原理: 当请求…

C++调用Python

Python安装 地址: python官网 可以根据需要下载对应的版本。 调用python python测试脚本 # my_script.py import sys import jsondef calculate(a, b):return a * b 10 # 示例计算逻辑if __name__ "__main__":# 从命令行参数读取 JSON 字符串try…

工程数字建造管理系统平台有哪些?好的数字建造管理系统推荐

一、什么是工程数字建造管理系统平台? 工程数字建造管理系统平台是一种集成了先进信息技术(如云计算、大数据、物联网等)的综合性管理工具,它旨在通过数字化手段提升工程建造全过程的管理效率和决策水平。这一平台不仅覆盖了工程…

Android开发EmojiCompat 初始化

Android开发EmojiCompat 初始化 报错信息: ensure spannable:java.lang.IllegalStateException: EmojiCompat is not initialized 在Application上写上下面代码即可: EmojiCompat.Config config new BundledEmojiCompatConfig(this);EmojiCompat.in…

【Go】数组

数组Array 重点: 数组是值类型 注意点: 1. 数组:是同一种数据类型的固定长度的序列。2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义&…

CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案

计算机该如何求解三角函数?或许你的第一印象是采用泰勒展开,或者采用多项式进行逼近。对于前者,来回的迭代计算开销成本很大;对于后者,多项式式逼近在较窄的范围內比较接近,超过一定范围后,就变…

【剪辑_BGM 整合】

【优质BGM➽以剪映为基础】 自定义 一、舒缓惬意 二、轻快 1,快乐骑行 2,医疗科普 3,宣传片励志摇滚热血 Going back to Business 4,电子宠物(memories) 5,诗与远方(热播&…

linux 常见命令使用介绍

Linux 常见命令使用介绍 Linux 是一个功能强大的操作系统,其核心是命令行工具。掌握一些常用的 Linux 命令可以极大地提高工作效率。本文将详细介绍一些常见的 Linux 命令及其用法。 1. 文件与目录操作 ls - 列出文件和目录 # 查看当前目录下的所有文件和子目录&…

Rust从入门到精通之精通篇:24.高级异步编程

高级异步编程 在 Rust 精通篇中,我们将深入探索 Rust 的高级异步编程技术。Rust 的异步编程模型基于 Future 特征和异步运行时,提供了高效的非阻塞 I/O 和并发处理能力。在本章中,我们将超越基础知识,探索如何构建高性能异步系统…

(C语言)学生信息表(基于通讯录改版)(测试版)(C语言项目)

1.首先是头文件: //student.h //头文件//防止头文件被重复包含#pragma once//宏定义符号常量,方便维护和修改 #define ID_MAX 20 #define NAME_MAX 20 #define AGE_MAX 5 #define SEX_MAX 5 #define CLA_MAX 20 //定义初始最大容量 #define MAX 1//定义结…

Problem D: 抽象类

1.题目问题 2.输入 3.输出 4.代码实现 补充: 没错,你没看错,没有 abstract class Vehicle ,才能过。 恶心人 答案: {abstract void NoOfWheels(); }class Car extends Vehicle {Overridepublic void NoOfWheels()…

UniApp开发多端应用——流式语音交互场景优化

一、问题背景:UniApp默认方案的局限性 在流式语音交互场景(如AI语音助手、实时字幕生成)中,UniApp默认的uni.getRecorderManager 和uni.createInnerAudioContext 存在以下瓶颈: 录音端: 延迟高&#xff1…

docker构建并启动前端

docker文件示例代码: # Use a minimal image for development FROM node:18-alpine# Set working directory inside the container WORKDIR /app# Copy package.json and package-lock.json (or yarn.lock) into the container COPY package.json package-lock.jso…

25大唐杯赛道一本科B组大纲总结(上)

25大唐杯省赛马上要开始,还没开始准备的要抓紧了 可看我之前发的备赛攻略,理论的准备要先将大纲整理成思维导图框架 然后根据重点,在资料中寻找,记忆 这里帮大家整理好了,后续其他组别会相继更新 基于竞赛大纲做的思…

【Python3教程】Python3基础篇之Lambda(匿名函数)

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

重试机制之指针退避策略算法

一、目的:随着重试次数增加,逐步延长重连等待时间,避免加重服务器负担。 二、计算公式: 每次重试的延迟时间 初始间隔 (退避基数 ^ 重试次数) 通常设置上限防止等待时间过长。 const delay Math.min(initialDelay * Math.pow…

SSE SseEmitter.completeWithError(e) 触发的处理逻辑

在 Java 客户端使用 OkHttp 监听 SSE(Server-Sent Events) 的情况下,当服务端调用 SseEmitter.completeWithError(e),客户端会触发 EventSourceListener 的 onFailure() 方法(而不是 onError)。 1. 服务端&…

4月手机新品前瞻,影像,性能与设计卷得起飞

在智能手机市场中,4月向来是新品频发的黄金时段。各大手机厂商纷纷摩拳擦掌,准备推出自家的重磅机型,在影像、性能与设计等核心领域展开激烈角逐,一场没有硝烟的“科技大战”即将拉开帷幕。接下来,让我们一同深入了解那些备受瞩目的新品,提前感受科技进步带来的魅力。 一…

设计审查效率革命|CAD原生数据直通自动公差验证

“为何 90% 的 GD&T 问题在设计评审时未被发现?怎样避免因 GD&T 考虑不周导致的批量返工?” 这正是 CETOL 自动辅助审查设计系统要解决的核心问题:通过200结构化审查规则拦截潜在设计疏漏。 功能一:装配约束健康诊断&…