乐于分享
好东西不私藏

Markdown文件转Word文件

Markdown文件转Word文件

C#实现MarkDown文件到Word文件的转换
老规矩先看界面:

技术方案

核心库MarkMyWord (NuGet 开源包)

1. 安装依赖

在 NuGet 包管理器中安装 MarkMyWord

2. 单文件转换

privateboolconverterToWord(string mdFilePath, string wordFilePath){    try    {        Cursor = Cursors.WaitCursor;        using var fsIn = new FileStream(mdFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);        using var fsOut = new FileStream(wordFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.None);        // 若需要传入转换选项,请替换 null 为合适的配置对象        MarkdownConverter.ConvertToDocx(fsIn, fsOut, null);        return true;    }    catch (Exception ex)    {       return false;    }    finally    {        Cursor = Cursors.Default;    }}
  1. 批量转换

    文件过滤工具方法

publicstatic IEnumerable<stringGetFilesByExtensions(string folder, IEnumerable<string> extensions, bool includeSubdirectories = false){    if (string.IsNullOrWhiteSpace(folder)) yield break;    if (!Directory.Exists(folder)) yield break;    var set = new HashSet<string>(extensions        .Where(e => !string.IsNullOrWhiteSpace(e))        .Select(e => e.StartsWith('.') ? e.ToLowerInvariant() : "." + e.ToLowerInvariant()));    var option = includeSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;    foreach (var path in Directory.EnumerateFiles(folder, "*", option))    {        if (set.Contains(Path.GetExtension(path).ToLowerInvariant()))            yield return path;    }}

批量处理逻辑

//批量处理 privatevoidbutton_saveAll_Click(object sender, EventArgs e) {     //获取目录中所有MarkDown文件     var folder = textBox_mdFilesDir.Text;     var exts = new[] { ".md" };     // 同步用法     var files = FileHelpers.GetFilesByExtensions(folder, exts, includeSubdirectories: true);     foreach (var f in files)     {         var wordFileName = Path.GetFileNameWithoutExtension(f) + ".docx";         var wordFilePath = Path.Combine(textBox_wordFileDir.Text, wordFileName);         converterToWord(f, wordFilePath);     } }

总结

  • MarkMyWord为开源项目,可放心使用
  • 支持单文件和批量转换两种模式
  • 通过文件扩展名过滤实现灵活的批量处理
另外,如需此工具或代码的小伙伴请私信留言。