Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel.Range.Find使用长度超过255个字符的字符串_C#_Excel - Fatal编程技术网

C# Excel.Range.Find使用长度超过255个字符的字符串

C# Excel.Range.Find使用长度超过255个字符的字符串,c#,excel,C#,Excel,我正在Excel中存储每个1023个字符的字符串。稍后,我需要能够搜索excel文件并找到值所在的行。我可以保证我要查找的字符串在工作簿中的某个地方只出现一次 目前,每次尝试搜索时都会出现类型不匹配错误(由于find函数的长度限制为255)。当我用“teststring”这样的短字符串替换搜索字符串时,它工作得很好。如何在Excel中搜索1023字符串 foreach (string missingItem in missingItems) { Range currentFind = n

我正在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;
        }
    }
}

简言之,如果前255个字符的所有字符串都是唯一的,那么就不必担心其他字符了

在对字符串执行查找之前,只需截断该字符串:

missingItem = Left(missingItem,255)
或者:

missingItem = Right (missingItem,255)
否则,如果前255个字符有许多重复项,您可以将字符串除以255,然后取整,然后将原始字符串拆分为单独的字符串,单独搜索,这对您有帮助吗

编辑:

或者,以下是如何检查字符串中某个范围内每个单元格的等效性:

Sub FindIt()
暗淡单元格作为范围
将搜索字符串设置为字符串
对于范围内的每个单元格(“A1:D500”)

如果单元格.Value="JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJWKJEFLKNEWEOIFNOWEINWOINWOINWOINWOINWONDDDDDDDDDDDDdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd“那么‘我要寻找的值是唯一的ID,我需要匹配所有1023个字符。我可以得到前255个字符的所有匹配的位置,然后检索值并搜索这些字符,但这似乎效率极低。我现在就用这个,但我希望有更优雅的东西。如果它们完全一样,你可以忘记。找到并检查每个单元格是否匹配missingItem。在我看来,“查找”更多的是用于快速搜索特定单词,而不是检查事物之间的等效性。前255个字符可能相同,但可能不同。我不知道。我将有一个我正在寻找的ID,其中有1到1000个ID分布在几个工作表之间。这就是为什么我希望find函数会有一些用处。我会使用一个自定义的find函数,比如edit中的函数。显然,出于您的目的,您可能希望返回Cell.Row,而不是返回Cell.Address。
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