如何从.net应用程序中搜索Excel中的值?

如何从.net应用程序中搜索Excel中的值?,.net,excel,.net,Excel,我必须从excel中搜索超过5000条记录的值 在windows.net应用程序中实现这一点的最佳方法是什么?您的值是由电子表格公式之一生成的计算值,还是实际的预定义值 如果是后者,您可以将电子表格保存为XML,并对其进行适当的解析 或 根据可用的索引技术,您可能可以对它们进行索引,然后搜索索引并找到适当的值。 (这是我的首选方法,现在我已经想到了。) 如果是前者,我能想到的唯一选择就是使用InterOp库打开每个记录并使用API。既然您试图搜索5000条记录,我想您一定是在尝试搜索thro值。

我必须从excel中搜索超过5000条记录的值


在windows.net应用程序中实现这一点的最佳方法是什么?

您的值是由电子表格公式之一生成的计算值,还是实际的预定义值

如果是后者,您可以将电子表格保存为XML,并对其进行适当的解析

根据可用的索引技术,您可能可以对它们进行索引,然后搜索索引并找到适当的值。
(这是我的首选方法,现在我已经想到了。)


如果是前者,我能想到的唯一选择就是使用InterOp库打开每个记录并使用API。

既然您试图搜索5000条记录,我想您一定是在尝试搜索thro值。 您可以使用InteropAPI中的“Range.Find”来执行此操作

private void OpenExcelFile()
{
     Excel.Application exlApp = new Microsoft.Office.Interop.Excel.Application();

    if (exlApp == null)
    {
        MessageBox.Show("Excel app object could not be created");
    }
    else
    {

        exlFileSelector.FileName = @"*.xls";

        if (exlFileSelector.ShowDialog() == DialogResult.OK)
        {
            Excel.Workbook wrkBook = exlApp.Workbooks.Open(exlFileSelector.FileName, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, true, true);
            Excel.Sheets sheetList = wrkBook.Sheets;

            Excel.Range search = exlApp.get_Range("A1", "C5");
            search.Find("FindMe", null, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, null, null); 
        }
    }
}
进一步阅读: 是一个与Excel兼容的.NET电子表格组件,它支持类似于Excel的Find API的Find API。您可以搜索值或公式,或者计算公式,然后根据需要搜索结果。下面是加载工作簿并查找以“John”开头的第一个单元格的简要示例:

你可以下载免费的评估


免责声明:我拥有SpreadsheetGear LLC,这将简化您的搜索,索引解决方案是否合适?
// Open an xlsx workbook (can also open xls).
IWorkbook workbook = Factory.GetWorkbook(@"C:\tmp\Data.xlsx");

// Find the first cell which starts with "John".
IRange foundCell = workbook.Worksheets["Sheet1"].Cells.Find("John*", null,
    FindLookIn.Values, LookAt.Whole, SearchOrder.ByColumns, SearchDirection.Next, true);
if (foundCell != null)
    Console.WriteLine("found {0} in cell {1}", foundCell.Text, foundCell.Address);