將 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.pswp.cn/pingmian/73750.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73750.shtml
英文地址,請注明出處:http://en.pswp.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結構化審查規則攔截潛在設計疏漏。 功能一:裝配約束健康診斷&…