如何使用C#反转ms word文档中的所有单词?
文档格式不应更改。除了文字顺序外,没有什么变化 文件:如何使用C#反转ms word文档中的所有单词?,c#,vb.net,ms-word,ms-office,office-interop,C#,Vb.net,Ms Word,Ms Office,Office Interop,文档格式不应更改。除了文字顺序外,没有什么变化 文件: Word1 word2 word3 word2... -- END OF LINE OR PARAGRAPH Word5 word1 word5 word4..... 倒车后应如下图所示 1droW 2drow 3drow 2drow... -- END OF LINE OR PARAGHRAPH 5droW 1drow 5drow 4drow..... 我已经有了这段代码,可以一个接一个地检查单词,但我不知道如何在不丢失格式的情况下
Word1 word2 word3 word2... -- END OF LINE OR PARAGRAPH
Word5 word1 word5 word4.....
倒车后应如下图所示
1droW 2drow 3drow 2drow... -- END OF LINE OR PARAGHRAPH
5droW 1drow 5drow 4drow.....
我已经有了这段代码,可以一个接一个地检查单词,但我不知道如何在不丢失格式的情况下进行更改
string RT = "";
Word.Application wordObject = new Word.Application();
wordObject.Visible = false;
Word.Document docs = wordObject.Documents.Open(@"D:\ELAHE (J)\a.docx");
String strLine;
bool bolEOF = false;
docs.Characters[1].Select();
int index = 0;
do {
object unit = Word.WdUnits.wdWord;
object count = 1;
wordObject.Selection.MoveEnd(ref unit, ref count);
wordObject.Selection.InsertBefore("");
strLine = wordObject.Selection.Text;
RT += ++index + " - " + strLine + "\r\n";
object direction = Word.WdCollapseDirection.wdCollapseEnd;
wordObject.Selection.Collapse(ref direction);
if (cnt++ > 100) break;
if (wordObject.Selection.Bookmarks.Exists(@"\EndOfDoc")) bolEOF = true;
} while (!bolEOF);
docs.Close();
wordObject.Quit();
docs = null;
wordObject = null;
刚刚创建了一个如何做到这一点的示例(C#5.0,Word Interop v.15(Office 2013))。代码循环遍历每个段落,并反转段落中的每个单词。该代码包括检查行尾符号(
\r
),以确保这些符号不会颠倒
我不能100%确定\r
是Word使用的唯一行尾符号,因此如果您遇到其他类型的符号,例如\r\n
或类似的符号,那么也应该直接检查这些符号
var wordApplication = new Application() { Visible = true };
var myDocument = wordApplication.Documents.Open(@"C:\Users\...\my.docx");
for (var i = 1; i <= myDocument.Paragraphs.Count; i++)
{
var paragraph = myDocument.Paragraphs[i];
var words = paragraph.Range.Words.Cast<Range>().Select(r => r.Text).ToList();
// Empty paragraph -> continue
if(words.Count == 1 && words[0] == "\r")
continue;
for (var j = 0; j < words.Count; j++)
{
var word = words[j];
// Should not be reversed
if(word == "\r")
continue;
var reversed = new string(word.Trim().Reverse().ToArray());
words[j] = (word.EndsWith(" ")) ? reversed + " " : reversed;
}
paragraph.Range.Text = string.Join("", words);
}
var wordApplication=new Application(){Visible=true};
var myDocument=wordApplication.Documents.Open(@“C:\Users\…\my.docx”);
for(var i=1;i r.Text).ToList();
//空段落->继续
如果(words.Count==1&&words[0]==“\r”)
继续;
for(var j=0;j
你想用这个算法实现什么?@PaulSasik我正在尝试反转文档中的每一个单词而不丢失它的样式。我理解这一点,但这样做最终会为你实现什么。我假设您所描述的算法只是一个更大问题的一部分。@PaulSasik该算法并不比这个大,我的确切目标是反转单词。您可以通过正则表达式模式测试您是否有一些有效的字母数字值,以及当它找到匹配项时反转它。。。