Python 如何实现 Markdown 与 Excel 互转

目录

[为什么要在 Excel 与 Markdown 之间进行转换](#为什么要在 Excel 与 Markdown 之间进行转换)

[安装所需的 Python 库](#安装所需的 Python 库)

[如何使用 Python 将 Excel 转换为 Markdown](#如何使用 Python 将 Excel 转换为 Markdown)

[在 Excel 转 Markdown 时自定义转换设置](#在 Excel 转 Markdown 时自定义转换设置)

[如何使用 Python 将 Markdown 转换为 Excel](#如何使用 Python 将 Markdown 转换为 Excel)

[如何只转换 Markdown 中的表格为 Excel](#如何只转换 Markdown 中的表格为 Excel)

总结


在日常办公中,Excel 是处理结构化数据的不二之选;但在技术写作、博客发布或 GitHub 项目维护中,Markdown 表格因其简洁、易读且无需附件即可预览的特性而备受青睐。

如何打破这两者之间的壁垒?利用 Python,我们只需几行代码即可实现 Excel 与 Markdown 的无缝转换。本文将通过实际示例,带你掌握以下技巧:

  • **Excel 转 Markdown:**基础转换与高级转换设置(如图片处理、超链接渲染)。
  • **Markdown 转 Excel:**将 Markdown 文件快速转换为可分析的 Excel 电子表格。
  • **进阶技巧:**从复杂、文字与表格混合的 Markdown 文档中精准提取表格并转为 Excel 表格。

为什么要在 Excel 与 Markdown 之间进行转换

在开始转换前,我们首先来了解一下在 Excel 和 Markdown之间进行转换的好处:

Excel 转 Markdown:提升文档的兼容性与协作效率

  • 优化展示体验:在 Wiki、README 或技术博客中,直接嵌入 Markdown 表格比提供一个 Excel 附件下载链接要友好得多。读者无需离开页面即可直观查看数据。
  • 适配版本控制:Markdown 是纯文本,与 Git 等版本控制系统完美兼容。每一行数据的修改都能清晰地展示出来,避免了无法追踪差异与历史版本的痛点。

Markdown 转 Excel:简化数据分析与工作流整合

  • 深度分析数据:Markdown 表格通常仅用于展示。将其转为 Excel 后,可以调用公式、透视表或图表进行二次建模,实现从"静态展示"到"动态分析"的跨越。
  • 无缝对接业务流程:许多传统业务场景仍依赖电子表格进行交付。通过转换,可以将抓取的网页数据或文档记录快速融入现有的报表体系。

安装所需的 Python 库

为了在 Python 中实现 Excel 和 Markdown 的转换,我们需要一个能同时处理这两种格式的库。Spire.XLS for Python 是一个不错的选择,它支持读写 .xlsx 和 .xls 格式的 Excel 文件,并能实现 Excel 与 Markdown 之间的格式转换。

你可以通过 pip 从 PyPI 安装该库:

python 复制代码
pip install spire.xls

**注意:**为确保兼容性,请确保你的 Python 版本为 3.7 或以上。

如何使用 Python 将 Excel 转换为 Markdown

将 Excel 文件转换为 Markdown 的步骤很简单,只需使用 Workbook.LoadFromFile 加载 Excel 文件,然后调用 Workbook.SaveToMarkdown 将其保存为 Markdown 格式即可。

实现代码:

以下代码展示了如何使用 Python 将一个 Excel 文件转换为 Markdown 格式:

python 复制代码
from spire.xls import *

input_file = "input.xlsx"
output_file = "output.md"

# 创建 Workbook 实例并加载 Excel 文件
workbook = Workbook()
workbook.LoadFromFile(input_file)

# 保存为 Markdown 文件
workbook.SaveToMarkdown(output_file)
workbook.Dispose()

在 Excel 转 Markdown 时自定义转换设置

如果你需要对转换效果进行更精细的控制,可以利用 MarkdownOptions 类来配置转换参数。例如,你可以指定图片的保存路径策略(相对路径或绝对路径),或者定义超链接的渲染方式。这在处理包含图片资源或复杂链接的 Excel 文件时尤为实用。

实现代码:

以下代码展示了如何在转换 Excel 文件为 Markdown 时配置转换参数:

python 复制代码
from spire.xls import *

input_file = "input.xlsx"
output_file = "output_with_options.md"

workbook = Workbook()
workbook.LoadFromFile(input_file)

# 创建并配置 MarkdownOptions 对象
markdownOptions = MarkdownOptions()
markdownOptions.SavePicInRelativePath = False   # 设置图片是否保存为相对路径
markdownOptions.SaveHyperlinkAsRef = False      # 设置超链接的渲染格式

# 应用配置并保存为 Markdown 文件
workbook.SaveToMarkdown(output_file, markdownOptions)
workbook.Dispose()

如何使用 Python 将 Markdown 转换为 Excel

将 Markdown 转回 Excel,可以方便地分析表格数据。其实现流程与 Excel 转 Markdown 的过程类似:

  • 创建 Workbook 实例。
  • 使用 Workbook.LoadFromFile 加载 Markdown 文件。
  • 使用 Workbook.SaveToFile 保存为 Excel 文件。

实现代码:

python 复制代码
from spire.xls import *

inputFile = "example.md"
outputFile = "output.xlsx"

workbook = Workbook()
workbook.LoadFromFile(inputFile)
workbook.SaveToFile(outputFile, ExcelVersion.Version2016)
workbook.Dispose()

提示:ExcelVersion 参数用于指定 Excel 文件版本。你可以对其进行修改,例如使用 ExcelVersion.97to2003 将文件保存为 .xls 文件,以兼容老版本的 Excel。

如何只转换 Markdown 中的表格为 Excel

当 Markdown 文件中混合了文本与表格时,我们往往只需要提取其中的表格数据到 Excel。鉴于标准的转换方法通常针对整个文件,因此我们需要编写逻辑来精准识别表格边界,并将不同的表格分别写入 Excel 的独立工作表中。

具体实现流程如下:

  • **逐行读取:**遍历 Markdown 文件的内容。
  • **识别表格块:**检测以竖线 | 开头和结束的行,以此界定表格范围。
  • **暂存数据:**将识别到的表格数据暂存至内存中。
  • **写入工作表:**为每一个提取出的表格在 Excel 中创建一个新的工作表,并写入相应数据。

实现代码:

python 复制代码
from spire.xls import *

def convert_multi_tables_to_excel(md_file_path, excel_file_path):
    # 初始化一个新的工作簿实例
    workbook = Workbook()
    
    # 清除由构造函数创建的默认空白工作表
    # 这确保我们的 Excel 文件只包含我们显式创建的工作表
    workbook.Worksheets.Clear()
    
    try:
        # 逐行读取 Markdown 文件内容
        with open(md_file_path, 'r', encoding='utf-8') as file:
            lines = file.readlines()
    except FileNotFoundError:
        print(f"错误:未找到文件 {md_file_path}。")
        return

    # --- 状态变量 ---
    current_table_data = []  # 一个缓冲区,用于存储当前正在解析的表格的行数据
    sheet_count = 0          # 用于命名工作表的计数器(表 1、表 2 等)
    in_table = False         # 布尔标志,用于跟踪当前是否处于表格块内部

    # --- 辅助函数 ---
    def save_current_table():
        """
        获取 current_table_data 中的数据,创建一个新的 Excel 工作表,
        填充数据,然后重置缓冲区。
        """
        nonlocal sheet_count, current_table_data, in_table
        
        if current_table_data:
            sheet_count += 1
            # 创建一个带有描述性名称的新工作表
            sheet_name = f"表 {sheet_count}"
            sheet = workbook.Worksheets.Add(sheet_name)
                        
            # 遍历存储的行并写入 Excel
            for r_idx, row_data in enumerate(current_table_data):
                for c_idx, cell_val in enumerate(row_data):
                    # 访问指定的单元格(行,列)
                    cell = sheet.Range[r_idx + 1, c_idx + 1]
                    cell.Text = cell_val
                    
                    # 对标题行(索引为 0)应用加粗格式
                    if r_idx == 0:
                        cell.Style.Font.IsBold = True
            
            # 自动调整列宽以确保内容可见
            sheet.AllocatedRange.AutoFitColumns()
            
            # 为下一个表格重置状态
            current_table_data = []
            in_table = False

    # --- 解析循环 ---
    for line in lines:
        line = line.strip()
        
        # 检查该行是否代表一个 Markdown 表格行(以 '|' 开头和结尾)
        if line.startswith('|') and line.endswith('|'):
            in_table = True
            
            # 跳过分隔行(例如 |---|---|),它只包含管道符、破折号或冒号
            if all(c in '|- :' for c in line):
                continue
            
            # 解析单元格:移除外部管道符并按内部管道符分割
            # 我们还去除了每个单元格内容中的空白字符
            cells = [c.strip() for c in line[1:-1].split('|')]
            
            # 将解析后的行添加到我们的临时缓冲区
            current_table_data.append(cells)
            
        else:
            # 如果该行不是表格行,检查我们之前是否在表格中
            if in_table:
                # 在表格之后遇到了非表格行,因此表格已完成。
                # 触发保存函数。
                save_current_table()

    # 边界情况:如果文件结束时我们仍在表格内部,
    # 循环将在不触发上面 'else' 块的情况下结束。
    # 我们必须确保保存最后一个表格。
    if in_table:
        save_current_table()

    # 将填充好的工作簿保存到文件
    workbook.SaveToFile(excel_file_path, ExcelVersion.Version2016)
    workbook.Dispose()
    print(f"成功将 {sheet_count} 个表格转换到 {excel_file_path}")

# 使用示例
convert_multi_tables_to_excel("example.md", "multi_sheet_output.xlsx")

以下代码展示了如何将一个 Markdown 文件中的每个表格分别转换为一个独立的 Excel 工作表:

总结

本文详细介绍了如何利用 Python 实现 Excel 与 Markdown 的互转:从基础的 Excel 转 Markdown,到通过自定义参数精细化控制转换效果,再到从复杂的 Markdown 文本中精准提取表格并转换为独立的 Excel 工作表。通过掌握这些方法,你可以在数据分析与文档管理之间自由切换,使信息共享、处理和复用更加高效和便捷。

本文完。

相关推荐
wj3055853784 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
星寂樱易李4 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
qingfeng154154 小时前
企业微信机器人开发:如何实现自动化与智能运营?
人工智能·python·机器人·自动化·企业微信
彦为君8 小时前
Agent 安全:从权限提示到沙箱隔离
python·ai·ai编程
PILIPALAPENG8 小时前
Python 语法速成指南:前端开发者视角(JS 类比版)
前端·人工智能·python
用户8356290780519 小时前
Python 操作 PowerPoint 页眉与页脚指南
后端·python
枫叶林FYL10 小时前
项目九:异步高性能爬虫与数据采集中枢 —— 基于 Crawl<sub>4</sub>AI 与 Playwright 的现代化数据采集平台 项目总览
爬虫·python·深度学习·wpf
猫猫的小茶馆10 小时前
【Python】函数与模块化编程
linux·开发语言·arm开发·驱动开发·python·stm32
Miss_min10 小时前
128K长序列数据生成
开发语言·python·深度学习