在C#中以xml形式快速获取单词范围的方法?

在C#中以xml形式快速获取单词范围的方法?,c#,wpf,ms-word,office-interop,C#,Wpf,Ms Word,Office Interop,我的代码: // use MS-Word Interop var rangeList = doc.Sentences.ofType<Range>().ToList();//About 4000 Sentences foreach (var range in rangeList) { string sentXml=range.get_XML(false);//get all sentences xml,it's very slow ,about 18 m

我的代码:

 //  use MS-Word Interop
 var rangeList = doc.Sentences.ofType<Range>().ToList();//About 4000 Sentences
 foreach (var range in rangeList)
  {
          string sentXml=range.get_XML(false);//get all sentences xml,it's very slow ,about 18 min
          //ConvertToFlowDocument(sentxml);
   }
//使用MS Word互操作
var rangeList=doc.statemens.ofType().ToList()//大约4000句话
foreach(范围列表中的变量范围)
{
string sentXml=range.get_XML(false);//获取所有句子XML,速度非常慢,大约18分钟
//ConvertToFlowDocument(sentxml);
}
但是它非常慢。 如何将range.WordOpenXML转换为openxml元素等


是的,我还使用
range.Copy()
转换为rtf字符串,速度也很慢。

当然,您可以使用
range.XML

我不确定您将如何处理它,但是如果您展示
get\uxml
方法的功能,这将非常有用。根据你的评论,听起来我的方法可能更快。您可以打开一个
StreamReader
,然后在其中插入
XML

WordprocessingDocument MainWordDocument;
using (StreamReader sr = new StreamReader(m_MainWordDocument.MainDocumentPart.GetStream()))
{

     string docText = sr.ReadToEnd();

     //Then, you can replace any text that you want
     //string textToReplace("");
     //docText = docText.Replace("what you want to replace", "some xml string that you extracted");

     //Or you can just add it onto the end.
     string docText = docText + sentXml;
     
     //Open a StreamWriter and write overwrite the file
     using (StreamWriter writer = new StreamWriter(filePath, true))
     {
          writer.Write(docText);
     }
 }

我不认为这是最有效的做事方式,也不知道为什么有人会同时使用
WordInterop
OpenXML
,这个问题已经很老了,但这回答了你的问题。如果您认为两者结合使用有一个很好的用例,我很想听听。

首先,您的代码不包括实际的转换。第二,为什么你把每一句话都当作一个单独的文档来阅读,而不是仅仅转换
doc
?如果您有100个句子,那么您将创建、打开和转换100个文档,而不是转换单个文档。现在,我希望在RichTextBox中显示每个句子和样式。我使用openxml get Range的文本和RunProperties非常快,现在我想使用MS Word按字面意思互接您的问题,将Word内容转换为RTF的唯一方法是通过剪贴板(即Range.Copy)或将其保存到新文件。在这种情况下,这意味着将内容传输到一个新文档,然后在该文档上使用SaveAs创建一个RTF文件。我认为Range.Copy()比保存到新文件要快。。。
WordprocessingDocument MainWordDocument;
using (StreamReader sr = new StreamReader(m_MainWordDocument.MainDocumentPart.GetStream()))
{

     string docText = sr.ReadToEnd();

     //Then, you can replace any text that you want
     //string textToReplace("");
     //docText = docText.Replace("what you want to replace", "some xml string that you extracted");

     //Or you can just add it onto the end.
     string docText = docText + sentXml;
     
     //Open a StreamWriter and write overwrite the file
     using (StreamWriter writer = new StreamWriter(filePath, true))
     {
          writer.Write(docText);
     }
 }