2016-03-07 17 views
-1

我在文字中有一些不可打断的连字符。我需要这个文本,因为它在输出中。但是,我正在删除不打破连字符的文字。如何在文字范围内处理文本中的非分行连字符?

Word.Range rangeObj = _wordDoc.Range(ref x, ref y); 
txt += rangeObj.Text; 

我正在使用上面的代码。而在txt变量我得到输出,但没有打破连字符删除。 在此先感谢。

+0

参见[mdsn](https://msdn.microsoft.com/en-us/library/office/ff195101.aspx)。 Chr(160)=不间断空格不是纯文本符号。 'Range.FormattedText'你能帮忙吗? –

+0

@詹姆斯拉胡尔的建议“不适合你”?你真的需要/想要处理包含特殊字符的文字是什么? –

+0

@辛迪,我想把它作为连字符在txt中。例如 - 假设文档中有2行。 1.正常连字符2.非破折号连字符当我阅读rangeObj.Text时,我想要连字符的文本。但是我得到了1.正常连字符2.不间断连字符。在2中没有连字符。 – James

回答

2
txt = Regex.Replace(txt, "[\u001e|\u2011|\u2013|\u2014]", "-"); 

我得到这个1个解决方案。我们可以用上面的代码行代替正常连字符的非分行连字符:

+0

你没有告诉我们你想用简单的连字符替换nonbreaking连字符,因为它在ms字的find属性中非常简单。 – Rahul

0

我不知道C#,但在VBA Range.FormattedText只是正常工作。尝试rangeObj.FormattedText

例如,在VBA中可以正常工作。

Sub test() 
    Set oRng = ActiveDocument.Paragraphs(1).Range 
     s = oRng.FormattedText 
     oRng.InsertAfter s 
    Set oRng = Nothing 
End Sub 
+0

此选项不适用于c# – James

+0

Metod无法正常工作,因为我们使用了对象'range'的接口方法,请参见[msdn](https://msdn.microsoft.com/ru-ru/library/office/ff192541。 aspx)使用'Range.FormattedText'和代码错误编写代码! –

0

我明白的问题是:如何替换从字范围与正常破折号读取文本字符串的任何非中断连字符(ANSI 30)(ANSI 45)。

这可以在VBA中使用Replace函数完成。例如:

txt = Replace(rangeObj.Text, Chr(30), "-") 

当然,C#使用.NET Framework提供的工具。这里是Replace方法,它可以用字符串或带有字符的字符替换字符串。由于非破折号连字符需要用其字符代码表示,因此Char过载是正确的。例如:

string selText = wdApp.Selection.Text; 
char cDash = (char) 45; 
char cNonBreakHyph = (char) 30; 
System.Diagnostics.Debug.Print(selText.Replace(cNonBreakHyph, cDash)); 
相关问题