在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);
}
}