gpt4 book ai didi

c# - 如何使用 Microsoft.Office.Interop.Word 在 C# 中的 Word 文件中查找突出显示的文本?

转载 作者:行者123 更新时间:2023-11-30 17:06:15 26 4
gpt4 key购买 nike

这个问题本来很简单,但事实证明,添加一个额外的条款让我很头疼。这里的问题是我不需要所有突出显示的“单词”,而是 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 role dans la diminution du cholestérol, la combustion des graisses, la prevention du diabète es AVC, et conjurer la démence。

现在假设有人突出显示“du cholestérol”,我的代码显然选择了两个词“du”和“cholestérol”。如何使连续突出显示的区域显示为单个单词?我的意思是“du cholestérol”应该作为 List 中的一个实体返回。一个字符一个字符扫描文档,标记高亮起点为选择起点,标记高亮终点为选择终点,有什么逻辑吗?

P.S.:如果有任何其他语言的库具有所需的功能,请告诉我,因为场景不是特定于语言的。我只需要以某种方式获得所需的结果。

编辑:根据 Oliver Hanappi 的建议,使用 StartEnd 修改了代码。但问题仍然在于,如果有两个这样的突出显示的短语,仅由一个空格分隔,程序会将这两个短语视为一个短语。仅仅是因为它读取的是 Words 而不是空格。可能需要围绕 if (thisStart == prevEnd) 进行一些编辑?

最佳答案

您可以使用 Find 更高效地执行此操作,它会更快地搜索并选择所有匹配的连续文本。请参阅此处的引用资料 http://msdn.microsoft.com/en-us/library/office/bb258967%28v=office.12%29.aspx

这是 VBA 中的一个示例,它打印所有出现的高亮文本:

Sub TestFind()

Dim myRange As Range

Set myRange = ActiveDocument.Content ' search entire document

With myRange.Find

.Highlight = True

Do While .Execute = True ' loop while highlighted text is found

Debug.Print myRange.Text ' myRange is changed to contain the found text

Loop

End With

End Sub

希望这可以帮助您更好地理解。

关于c# - 如何使用 Microsoft.Office.Interop.Word 在 C# 中的 Word 文件中查找突出显示的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com