python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Markdown与Excel互转

利用Python实现Markdown与Excel互转

作者:SunnyDays1011

本文介绍了如何使用Python实现Excel和Markdown之间的转换,重点包括基础转换、高级设置调整、从复杂文档中提取表格并转换为Excel,转换原因包括提升文档兼容性、优化展示体验、适配版本控制、简化数据分析和工作流整合,文中提供了具体代码示例,帮助读者轻松实现转换

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

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

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

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

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

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

安装所需的 Python 库

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

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

pip install spire.xls

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

如何使用 Python 将 Excel 转换为 Markdown

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

实现代码:

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

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 时配置转换参数:

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 的过程类似:

实现代码:

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 的独立工作表中。

具体实现流程如下:

实现代码:

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 工作表。通过掌握这些方法,你可以在数据分析与文档管理之间自由切换,使信息共享、处理和复用更加高效和便捷。

以上就是利用Python实现Markdown与Excel互转的详细内容,更多关于Python Markdown与Excel互转的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文