在 Word VSTO 插件中链接字符串 Word.interop
Linking a string in Word VSTO addin Word.interop
我有一个包含文本和数字的 word 文档。数字是这样写的:
2-16-9035/88, 2-16-8344/41, 5-17-43/12, 2-15-5027/137
等等。他们之间可能有文字。喜欢:
"There was a 2-16-9035/88 case in 2-16-8344/4".
我需要在数字下面加一个 link。
我有一个代码:
private void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, object findText, object replaceWithText)
{
//options
object matchCase = false;
object matchWholeWord = true;
object matchWildCards = false;
object matchSoundsLike = false;
object matchAllWordForms = false;
object forward = true;
object format = false;
object matchKashida = false; //Function for searching and wrapping the text. It can also replace the wraped text.
object matchDiacritics = false;
object matchAlefHamza = false;
object matchControl = false;
object read_only = false;
object visible = true;
object replace = false;
object wrap = 1;
//execute find and replace
doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
}
private void Button3_Click(object sender, RibbonControlEventArgs e)
{
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
Word.Application app = Globals.ThisAddIn.Application;
foreach (Word.Paragraph paragraph in doc.Paragraphs)
{
FindAndReplace(app, "Google", ""); //searching and wrapping.
Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
Microsoft.Office.Interop.Word.Hyperlink hp = (Microsoft.Office.Interop.Word.Hyperlink)
currentRange.Hyperlinks.Add(currentRange, "www.google.com");
}
}
现在我可以搜索一个词 "Google" 把它包起来然后放上 link。
也许你会知道我如何搜索房子号码。如您所见,它们的长度可以不同。我需要的是找到一个数字,得到一个字符串(找到的数字)并添加 hyperlink: https://www.****asjaNr=$"{NumberWhatIsFound}"
要找到这样的模式,必须使用 Word 的通配符搜索功能(有点像 RegEx)。下面找到问题中贴出的样本
<[0-9]-[0-9]{1;}-[0-9]{1;}/[0-9]{1;}>
单词的开头 | 0 - 9 范围内任何字符的一个实例 |一个 -
个字符 | 0 - 9 范围内的任意数量的字符 |一个 -
个字符 | 0 - 9 范围内的任意数量的字符 |斜杠 /
| 0 - 9 范围内的任意数量的字符 |单词结束
您可能需要做进一步的测试,如果您知道任何一组数字的出现次数有限,请设置上限(在 ;
之后和右大括号 [=16 之前) =].
另请注意,根据 Windows 中的区域设置,您可能需要 ,
代替大括号中的 ;
。
我已经修改了问题中的代码以使用通配符。由于调用过程需要处理结果范围和文本,我已将签名更改为 return a Word.Range
。它还接受一个 Word.Range
参数并执行 Range.Find
而不是 Selection.Find
,因为它更可靠且使用起来更准确。
如果 Find
成功,Range
将更改为 "found" 项。 Execute
returns 布尔值,表示成功或失败。这是检查和 null
是 returned 以防失败。
我没有尝试创建您指定的超链接,因为这不是问题的关键(每个问题只有一个问题!),但我已经说明了如何使用 returned Range
生成它。
请注意,我确实测试了通配符搜索字符串,但是调整代码是在没有测试的情况下完成的,因为我没有时间为其设置项目。所以你可能会在这里或那里遇到语法错误...
using Word = Microsoft.Office.Interop.Word;
private Word.Range FindAndReplace(Word.Range rngToSearch, object findText, object replaceWithText)
{
bool found = false;
//options
object matchCase = false;
object matchWholeWord = true;
object matchWildCards = true;
object matchSoundsLike = false;
object matchAllWordForms = false;
object forward = true;
object format = false;
object matchKashida = false;
object matchDiacritics = false;
object matchAlefHamza = false;
object matchControl = false;
object read_only = false;
object visible = true;
object replace = false;
object wrap = 1;
//execute find and replace
found = rngToSearch.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
if (!found)
{
rngToSearch = null;
}
return rngToSearch;
}
private void Button3_Click(object sender, RibbonControlEventArgs e)
{
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
Word.Range rng = doc.Content;
string searchTerm = @"<[0-9]-[0-9]{1;}-[0-9]{1;}/[0-9]{1;}>";
string hyperlink = ""; //put your hyperlink stuff here
foreach (Word.Paragraph paragraph in doc.Paragraphs)
{
Word.Range rngFound = FindAndReplace(rng, searchTerm, ""); //searching and wrapping.
if (rngFound != null)
{
Word.Hyperlink hp = (Word.Hyperlink)
rngFound.Hyperlinks.Add(rngFound, hyperlink + rngFound.Text);
}
}
}
我有一个包含文本和数字的 word 文档。数字是这样写的:
2-16-9035/88, 2-16-8344/41, 5-17-43/12, 2-15-5027/137
等等。他们之间可能有文字。喜欢:
"There was a 2-16-9035/88 case in 2-16-8344/4".
我需要在数字下面加一个 link。 我有一个代码:
private void FindAndReplace(Microsoft.Office.Interop.Word.Application doc, object findText, object replaceWithText)
{
//options
object matchCase = false;
object matchWholeWord = true;
object matchWildCards = false;
object matchSoundsLike = false;
object matchAllWordForms = false;
object forward = true;
object format = false;
object matchKashida = false; //Function for searching and wrapping the text. It can also replace the wraped text.
object matchDiacritics = false;
object matchAlefHamza = false;
object matchControl = false;
object read_only = false;
object visible = true;
object replace = false;
object wrap = 1;
//execute find and replace
doc.Selection.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
}
private void Button3_Click(object sender, RibbonControlEventArgs e)
{
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
Word.Application app = Globals.ThisAddIn.Application;
foreach (Word.Paragraph paragraph in doc.Paragraphs)
{
FindAndReplace(app, "Google", ""); //searching and wrapping.
Word.Range currentRange = Globals.ThisAddIn.Application.Selection.Range;
Microsoft.Office.Interop.Word.Hyperlink hp = (Microsoft.Office.Interop.Word.Hyperlink)
currentRange.Hyperlinks.Add(currentRange, "www.google.com");
}
}
现在我可以搜索一个词 "Google" 把它包起来然后放上 link。
也许你会知道我如何搜索房子号码。如您所见,它们的长度可以不同。我需要的是找到一个数字,得到一个字符串(找到的数字)并添加 hyperlink: https://www.****asjaNr=$"{NumberWhatIsFound}"
要找到这样的模式,必须使用 Word 的通配符搜索功能(有点像 RegEx)。下面找到问题中贴出的样本
<[0-9]-[0-9]{1;}-[0-9]{1;}/[0-9]{1;}>
单词的开头 | 0 - 9 范围内任何字符的一个实例 |一个 -
个字符 | 0 - 9 范围内的任意数量的字符 |一个 -
个字符 | 0 - 9 范围内的任意数量的字符 |斜杠 /
| 0 - 9 范围内的任意数量的字符 |单词结束
您可能需要做进一步的测试,如果您知道任何一组数字的出现次数有限,请设置上限(在 ;
之后和右大括号 [=16 之前) =].
另请注意,根据 Windows 中的区域设置,您可能需要 ,
代替大括号中的 ;
。
我已经修改了问题中的代码以使用通配符。由于调用过程需要处理结果范围和文本,我已将签名更改为 return a Word.Range
。它还接受一个 Word.Range
参数并执行 Range.Find
而不是 Selection.Find
,因为它更可靠且使用起来更准确。
如果 Find
成功,Range
将更改为 "found" 项。 Execute
returns 布尔值,表示成功或失败。这是检查和 null
是 returned 以防失败。
我没有尝试创建您指定的超链接,因为这不是问题的关键(每个问题只有一个问题!),但我已经说明了如何使用 returned Range
生成它。
请注意,我确实测试了通配符搜索字符串,但是调整代码是在没有测试的情况下完成的,因为我没有时间为其设置项目。所以你可能会在这里或那里遇到语法错误...
using Word = Microsoft.Office.Interop.Word;
private Word.Range FindAndReplace(Word.Range rngToSearch, object findText, object replaceWithText)
{
bool found = false;
//options
object matchCase = false;
object matchWholeWord = true;
object matchWildCards = true;
object matchSoundsLike = false;
object matchAllWordForms = false;
object forward = true;
object format = false;
object matchKashida = false;
object matchDiacritics = false;
object matchAlefHamza = false;
object matchControl = false;
object read_only = false;
object visible = true;
object replace = false;
object wrap = 1;
//execute find and replace
found = rngToSearch.Find.Execute(ref findText, ref matchCase, ref matchWholeWord,
ref matchWildCards, ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWithText, ref replace,
ref matchKashida, ref matchDiacritics, ref matchAlefHamza, ref matchControl);
if (!found)
{
rngToSearch = null;
}
return rngToSearch;
}
private void Button3_Click(object sender, RibbonControlEventArgs e)
{
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
Word.Range rng = doc.Content;
string searchTerm = @"<[0-9]-[0-9]{1;}-[0-9]{1;}/[0-9]{1;}>";
string hyperlink = ""; //put your hyperlink stuff here
foreach (Word.Paragraph paragraph in doc.Paragraphs)
{
Word.Range rngFound = FindAndReplace(rng, searchTerm, ""); //searching and wrapping.
if (rngFound != null)
{
Word.Hyperlink hp = (Word.Hyperlink)
rngFound.Hyperlinks.Add(rngFound, hyperlink + rngFound.Text);
}
}
}