为有中文需求的客户提供多渠道中文技术支持.

Fri Nov 15, 2024 8:56 am

Spire.Doc For .NET 12.4.7
请问我应该如何找到 字符串在指定Paragraph中完整的TextSelection列表,并且需要实现大小写敏感和全词匹配。
我尝试使用以下两种方法:
1.下面这个接口只会返回找到的第一个TextSelection。
Code: Select all
paragraph.Find(string given, bool caseSensitive, bool wholeWord)


2.以下代码不能实现全词匹配
Code: Select all
        /// <summary>
        /// 查找段落中的文本所在TextSelection
        /// (注:未能实现全词匹配)
        /// </summary>
        /// <param name="paragraph">段落</param>
        /// <param name="given">查找的字符串</param>
        /// <param name="isCaseSensitive">是否大小写敏感</param>
        /// <returns></returns>
        public List<TextSelection> FindSelectionList(Paragraph paragraph, string given, bool isCaseSensitive)
        {
            var findSelectionList = new List<TextSelection>();
            if (!string.IsNullOrEmpty(paragraph.Text))
            {
                var startIndex = 0;
                var stringComparison = isCaseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase;
                while (true)
                {
                    var index = paragraph.Text.IndexOf(given, startIndex, stringComparison);
                    if (index < 0)
                    {
                        break;
                    }
                    startIndex = index + given.Length;
                    var findSelection = new TextSelection(paragraph, index, startIndex);
                    findSelectionList.Add(findSelection);
                }
            }

            return findSelectionList;
        }

leehao001
 
Posts: 7
Joined: Thu Nov 14, 2024 6:41 am

Fri Nov 15, 2024 10:21 am

你好,

感谢留言。
您可以使用paragraph.FindAllString(string given, bool caseSensitive, bool wholeWord)方法,这个方法可以查找段落中所有的关键词并实现大小写敏感和全词匹配。如果您还有其他问题,欢迎随时留言。

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 445
Joined: Mon Nov 07, 2022 8:10 am

Mon Nov 18, 2024 12:45 am

我尝试用您说的这个方法,但是在程序中这个方法未定义,我用的Spire.Doc For .Net 版本12.10.13,报错如图

leehao001
 
Posts: 7
Joined: Thu Nov 14, 2024 6:41 am

Mon Nov 18, 2024 3:41 am

你好,

抱歉,我们.Net版本目前确实尚未同步此方法,我已经将这个问题提交到了我们的bug跟踪系统中,编号为SPIREDOC-10946,我们的开发团队会尽快将这个方法同步到.Net版本中。同步成功后,我们会及时通知您。
在此之前,您可以暂时参考下面的代码,通过全文查找,然后逐个判断获取的关键字是否属于指定段落。

Code: Select all
void FindTextInPara()
{
    Document doc = new Document();
    doc.LoadFromFile("查找关键字.docx");

    // 全文查找关键字
    TextSelection[] tsList = doc.FindAllString("E-iceblue", true, true);

    // 假设这是要查找的paragraph
    Paragraph para = doc.Sections[0].Paragraphs[1];
   
    // 遍历关键字列表
    for (int i = 0; i < tsList.Length; i++)
    {
        TextSelection ts = tsList[i];
        Spire.Doc.Fields.TextRange tr = ts.GetAsOneRange();
        // 获取关键字段落
        Paragraph paragraph = tr.OwnerParagraph;
        // 判断关键字段落是否属于指定段落
        if (paragraph == para)
        {
            Debug.WriteLine(true);
        }
    }
}


Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 445
Joined: Mon Nov 07, 2022 8:10 am

Fri Dec 27, 2024 9:09 am

你好,
感谢您的耐心等待,很高兴通知您我们发布了Spire.Doc 12.12.12,其中包含了您提出的问题SPIREDOC-10946修复。欢迎从下面的链接下载新的版本测试。

官网下载:https://www.e-iceblue.cn/Downloads/Spire-Doc-NET.html
nuget下载:https://www.nuget.org/packages/Spire.Doc/12.12.12
https://www.nuget.org/packages/Spire.Docfor.NETStandard/12.12.12

Sincerely,
Doris
E-iceblue support team
User avatar

Doris.Liu
 
Posts: 445
Joined: Mon Nov 07, 2022 8:10 am

Return to 中文技术支持