Как найти значение в Excel из приложения .net? - PullRequest
0 голосов
/ 10 марта 2009

Мне нужно найти значение более 5000 записей из Excel.

Каков наилучший подход для достижения этой цели в приложении Windows .net?

Ответы [ 3 ]

1 голос
/ 10 марта 2009

Поскольку вы пытаетесь выполнить поиск по «5000 записям», я предполагаю, что вы пытаетесь выполнить поиск по «значениям». Для этого вы можете использовать «Range.Find» из API взаимодействия.

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); 
        }
    }
}

Дополнительная информация: Как выполнить поиск текста в диапазонах рабочих листов

1 голос
/ 10 марта 2009

SpreadsheetGear для .NET - это совместимый с Excel компонент электронных таблиц для .NET, который поддерживает API-интерфейс Find, аналогичный API-интерфейсу Find Excel. Вы можете искать значения или формулы, или вычислять формулы, а затем искать результаты, если это необходимо. Вот краткий пример, который загружает рабочую книгу и находит первую ячейку, которая начинается с «Джона»:

// 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);

Вы можете скачать бесплатную оценку здесь .

Отказ от ответственности: я владею SpreadsheetGear LLC

0 голосов
/ 10 марта 2009

Является ли ваше значение расчетным значением, полученным по одной из формул электронной таблицы, или фактическим предварительно определенным значением?

Если это позже, вы можете сохранить таблицы в формате XML и соответствующим образом их проанализировать
или
В зависимости от имеющейся у вас технологии индексирования вы можете проиндексировать их, а затем выполнить поиск по индексу и найти соответствующее значение.
(Это был бы мой предпочтительный подход, теперь, когда я об этом подумал.)

Если это первое, единственный вариант, который я могу придумать, - это открыть каждый из них с помощью библиотек InterOp и использовать API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...