这个问题本来很简单,但事实证明,添加了一个额外的条款让我很头疼。这里的问题是我不需要所有突出显示的“单词”,而是 Word 文件中的“短语”。我写了以下代码:
using Word = Microsoft.Office.Interop.Word;
private void button1_Click(object sender, EventArgs e)
{
try
{
Word.ApplicationClass wordObject = new Word.ApplicationClass();
wordObject.Visible = false;
object file = "D:\\mywordfile.docx";
object nullobject = System.Reflection.Missing.Value;
Word.Document thisDoc = wordObject.Documents.Open(ref file, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject, ref nullobject);
List<string> wordHighlights = new List<string>();
//Let myRange be some Range which has my text under consideration
int prevStart = 0;
int prevEnd = 0;
int thisStart = 0;
int thisEnd = 0;
string tempStr = "";
foreach (Word.Range cellWordRange in myRange.Words)
{
if (cellWordRange.HighlightColorIndex.ToString() == "wdNoHighlight")
{
continue;
}
else
{
thisStart = cellWordRange.Start;
thisEnd = cellWordRange.End;
string cellWordText = cellWordRange.Text.Trim();
if (cellWordText.Length >= 1) // valid word length, non-whitespace
{
if (thisStart == prevEnd) // If this word is contiguously highlighted with previous highlighted word
{
tempStr = String.Concat(tempStr, " "+cellWordText); // Concatenate with previous contiguously highlighted word
}
else
{
if (tempStr.Length > 0) // If some string has been concatenated in previous iterations
{
wordHighlights.Add(tempStr);
}
tempStr = "";
tempStr = cellWordText;
}
}
prevStart = thisStart;
prevEnd = thisEnd;
}
}
foreach (string highlightedString in wordHighlights)
{
MessageBox.Show(highlightedString);
}
}
catch (Exception j)
{
MessageBox.Show(j.Message);
}
}
现在考虑以下文本:
Le thé vert a un rôle dans la diminution du cholestérol, la burning des graisses, la prevention du diabète et les AVC, et conjurer la démence。
现在假设有人突出显示“ du cholestérol ”,我的代码显然选择了两个词“ du ”和“ cholestérol ”。如何使连续突出显示的区域显示为一个单词?我的意思是“ du cholestérol ”应该作为一个实体返回List
。我们按字符扫描文档,将突出显示的起点标记为选择的起点,将突出显示的终点标记为选择的终点的任何逻辑?
PS:如果有任何其他语言的所需功能的库,请让我知道,因为场景不是特定于语言的。我只需要以某种方式获得所需的结果。
编辑:按照 Oliver Hanappi 的建议Start
修改了代码。End
但问题仍然在于,如果有两个这样的突出显示的短语,仅由一个空格分隔,则程序将两个短语视为一个。仅仅因为它读取Words
而不是空格。可能需要一些编辑if (thisStart == prevEnd)
吗?