C# 在C语言中将单词范围转换为Html

C# 在C语言中将单词范围转换为Html,c#,ms-word,C#,Ms Word,我正在尝试将单词范围转换为Html。我知道如何转换Word文档,但如何仅转换Word文档的一个范围 转换完整Word文档的代码如下所示: private string GetHtmlFromRange(Range range) { XElement html; byte[] byteArray = File.ReadAllBytes(@"C:\test.docx"); using (MemoryStream memoryStream = new MemoryStream())

我正在尝试将单词范围转换为Html。我知道如何转换Word文档,但如何仅转换Word文档的一个范围

转换完整Word文档的代码如下所示:

private string GetHtmlFromRange(Range range)
{
  XElement html;

  byte[] byteArray = File.ReadAllBytes(@"C:\test.docx");
  using (MemoryStream memoryStream = new MemoryStream())
  {
    memoryStream.Write(byteArray, 0, byteArray.Length);
    using (WordprocessingDocument doc = WordprocessingDocument.Open(memoryStream, true))
    {
      HtmlConverterSettings settings = new HtmlConverterSettings()
      {
        PageTitle = "My Page Title"
      };
      html = HtmlConverter.ConvertToHtml(doc, settings);

      File.WriteAllText("Test.html", html.ToStringNewLineOnAttributes());
    }
  }

  return html.ToStringNewLineOnAttributes();
}

我也有类似的问题。如果从使用HtmlConverter,则无法直接从MemoryStream执行转换。要转换范围,首先需要解析原始文档并创建一个仅包含所需范围的新文档,或者指定要包含在新文档中的段落对象,而不是范围。在任何一种情况下,转换都将在定义新文档之后进行。这是因为对象模型不使用范围;字符范围是呈现文档的属性

因此,您的选项是:A首先解析呈现的文档,以便使用方法处理所需的范围;B解析转换后的html,以便使用类似的方法选择与所需范围对应的元素

对于我的解决方案,我意识到每个用例都要求用户已经安装了MS Office,所以我只使用了Microsoft.Office.Interop.Word:

1定义要选择的范围,例如从位置5到位置100,包括非打印字符

        var doc = Globals.ThisAddIn.Application.ActiveDocument;
        object start = 5;
        object end = 100;
        var originalText = doc.ActiveWindow.Selection;
2将范围复制到新文档

        var newDocument = new Word.Document();
        newDocument.Range().FormattedText = doc.Range(start, end).FormattedText;
3保存新文档

        object nullParameter = System.Reflection.Missing.Value;
        object outputFileName = @"D:\converted.html";
        object fileFormat = Word.WdSaveFormat.wdFormatFilteredHTML;
        newDocument.SaveAs(ref outputFileName, ref fileFormat);
        newDocument.Close(ref nullParameter, ref nullParameter, ref nullParameter);
4使用System.IO访问输出文件,并对内容执行任何操作,完成后将其删除

它一点也不优雅,但如果您使用的是互操作,优雅可能不是必需的