【问题标题】:Excel.Range.Find using a string longer than 255 charactersExcel.Range.Find 使用超过 255 个字符的字符串
【发布时间】:2012-07-30 14:59:31
【问题描述】:

我在 Excel 中存储每个包含 1023 个字符的字符串。稍后,我需要能够搜索 excel 文件并找到值所在的行。我可以保证我要查找的字符串恰好出现在工作簿的某个位置。

目前我每次尝试搜索时都会收到类型不匹配错误(由于 find 函数的长度限制为 255)。当我用“teststring”之类的短字符串替换我的搜索字符串时,它可以正常工作。如何在 Excel 中搜索 1023 个字符的字符串?

foreach (string missingItem in missingItems)
{
    Range currentFind = null;
    foreach (Worksheet searchSheet in oWB.Worksheets)
    {
        Range lookAtRange = (Range)searchSheet.get_Range ("A1", "F20");

        currentFind = lookAtRange.Find (
            missingItem, 
            Missing.Value, 
            XlFindLookIn.xlValues,
            Missing.Value,
            Missing.Value, 
            XlSearchDirection.xlNext, 
            false, 
            false,
            Missing.Value);

        if (currentFind != null)
        {
            Range deleteRow = (Range)searchSheet.Rows[currentFind.Row];
            deleteRow.Delete (XlDirection.xlUp);
            break;
        }
    }
}

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    http://www.vbaexpress.com/forum/archive/index.php/t-9179.html

    简而言之,如果您的所有字符串的前 255 个字符都是唯一的,那么您无需担心其余部分。

    您只需要在对其执行查找之前截断字符串:

    missingItem = Left(missingItem,255)
    

    或者:

    missingItem = Right (missingItem,255)
    

    否则,如果前 255 个字符有很多重复项,您可以将字符串除以 255 - 然后四舍五入 - 然后将原始字符串分成单独的字符串,逐个搜索 - 这对您有帮助吗?

    编辑:

    否则,您可以通过以下方式检查字符串是否与范围内的每个单元格等效: http://www.vbaexpress.com/kb/getarticle.php?kb_id=167

    Sub FindIt()
        Dim Cell As Range
        Dim SearchString As String
        For Each Cell In Range("A1:D500")
            If Cell.Value = "dqwlokjdowqijowqijdoinowiqhdoiwqiophiruegnqpiunrgpiuqgnrgkjffndskfiougpiodghiudhfgtothisansdfldkjflsdffjlksdjflksjfdoiejwfoiwjeoinfoinewoifjwoiejfoiwejfoiwejfoijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjwerkjwelkfjwelkjflkwejlfkjwelkjflwkjeflknweoifnoweinfoinewfoinoifwnwoienfoinweoddddddddddddddddddddddddddddddddddddddddfinwoioiefldkjsfoijoneiojfoijfewwefweeeeeeeeeeeefwef" Then '<< use "Like" for wildcards in If-Then statements
                MsgBox "An ''it'' was found at " & Cell.Address & " (" & Cell & ")"
            End If
        Next Cell
    End Sub
    

    是的,当我的老板走过时,我确实假装输入了一些重要的东西。不过我不认为他被愚弄了——因为我只是在键盘上捣碎了它。

    【讨论】:

    • 我要查找的值是唯一 ID,我需要匹配所有 1023 个字符。我可以获取前 255 个字符的所有匹配项的位置,然后检索该值并通过它们进行搜索,但这似乎非常低效。我现在会使用它,但我希望有更优雅的东西。
    • 如果它们完全一样,你可以忘记 .find 并检查每个单元格是否匹配missingItem。 .find 在我看来更多的是用于快速搜索特定单词 - 而不是检查事物之间的等价性。
    • 前 255 个字符可能相同,也可能不同。我不会知道。我将有一个我正在寻找的 ID,并且在几个工作表之间会有 1 到 1000 个这些 ID。这就是为什么我希望 find 函数会有用处。
    • 我会使用自定义查找功能,就像我编辑中的那个。显然,出于您的目的,您可能希望返回 Cell.Row,而不是返回 Cell.Address。
    猜你喜欢
    • 1970-01-01
    • 2022-04-20
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多