Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/20: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Vadosss63
2 / 2 / 3
Регистрация: 06.08.2011
Сообщений: 43
1

Как организовать поиск нужной информации в Excel

06.08.2011, 21:05. Просмотров 3599. Ответов 2
Метки нет (Все метки)

Здравствуйте!!! Подскажите какой-нибудь алгоритм более быстрого писка информации из ячеек Excel.
Задача такая есть некоторая информация(номер телефона 89111111111) она находится в textBox по нажатию на кнопку (поиск) программа обращается к файлу excel после чего находит там нужную ячейку и выводит информацию о индексе к примеру.Главная проблема в том как ускорить поиск например по такому коду он длится около 40 сек при 16000 записей в столбце!!!вот пример моего поиска
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
if (openFileDialog1.ShowDialog() == DialogResult.OK)
             {
                 ObjWorkBook = ObjExcel.Workbooks.Open("D:\\база.xlsx", 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];//Выбираем таблицу(лист).
                         
                int i = 0;
                string t;// переменная для ячейки
 
                int kk = 0;//переменная для заполнения таблицы
                do            
                {
                    i++;
                    range = ObjWorkSheet.get_Range("J" + i.ToString(), "J" + i.ToString());//Выбираем область таблицы. (в нашем случае просто ячейку)
                    t = range.Text.ToString();//чтение данных                 
                    if (t == dateTimePicker1.Text)
                    {
                       
                        reser = i;//срока имеющая совпадения
 
 
                        dataGridView1.Rows.Add();//добавление строк
                         
                        for (int m = 0 ; m < 13; m++)
                        {
                            range = ObjWorkSheet.get_Range(abc[m] + reser.ToString(), abc[m] + reser.ToString());//дата
                            dataGridView1[m, kk].Value = range.Text.ToString();// заполняется таблица совпадений
                            }
                        kk++;
                    }
 
                } while (t != "");
             }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2011, 21:05
Ответы с готовыми решениями:

Как организовать поиск в текстовом поле? (Наподобие поисковиков)
Нужно на форме сделать текстовое поле. Которое при начале ввода искало записи в...

Как при помощи библиотеки Xapian организовать поиск похожих строк в словаре
Здравствуйте, Уважаемые форумчане! Мне нужна помощь в решении следующего...

Вывод информации в Excel
Сделал вывод информации в Excel. Время от времени по непонятным мне причинам...

Организовать поиск в XML-файле
Нужно написать такое условие: (если в xml файле присутствует &lt;listbox2&gt; ...

Нужно организовать поиск в реальном времени по массиву
Вопрос вот в чем. Есть массив строк - достаточно большой (~10000 элементов)....

2
Etrimus
387 / 354 / 54
Регистрация: 23.05.2010
Сообщений: 716
06.08.2011, 22:46 2
Попробуй воспользоваться тем, что даёт сам Эксель. Я записал действие поиска в обычном Эксель файле в макрос. Вот такой макрос получился:
vb.net
1
2
3
4
5
6
7
8
9
Sub Макрос1()
' Макрос1 Макрос
'
 
'
    Cells.Find(What:="Вася", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
End Sub
Как я понял, у ячеек есть метод Find(). Им и стоит попробовать воспользоваться, попробой на Шарп переписать.
0
Vadosss63
2 / 2 / 3
Регистрация: 06.08.2011
Сообщений: 43
07.08.2011, 11:05  [ТС] 3
Попробовал Find() на Шарпе, как бы работает да вот только индекс вернуть не могу. он мне возвращает результат поиска. Нашел пример в msdn:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
private void FindValue()
{
    this.Range["A1", missing].Value2 = "Barnacle";
    this.Range["A2", missing].Value2 = "Seashell";
    this.Range["A3", missing].Value2 = "Star Fish";
    this.Range["A4", missing].Value2 = "Seashell";
    this.Range["A5", missing].Value2 = "Clam Shell";
 
    Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
        this.Controls.AddNamedRange(this.Range["A1", "A5"],
        "namedRange1");
 
    // Find the first occurrence of "Seashell".
    Excel.Range Range1 = namedRange1.Find("Seashell", missing, missing,
        Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByColumns,
        Microsoft.Office.Interop.Excel.XlSearchDirection.xlNext,
        false, false, missing);
 
    // Find the next occurrence of "Seashell".
    Range1 = namedRange1.FindNext(Range1);
 
    // Return to the first occurrence of "Seashell".
    Range1 = namedRange1.FindPrevious(Range1);
 
    // Cut the range with the first "Seashell" and copy it to cell B1.
    Microsoft.Office.Tools.Excel.NamedRange namedRange2 =
        this.Controls.AddNamedRange(Range1, "namedRange2");
    namedRange2.Cut(this.Range["B1", missing]);
}
да вот только его не запустить пишет что в строчке Microsoft.Office.Tools.Excel.NamedRange пропущена ссылка на сборку (Tools).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 11:05

Как получить страницу по GET в нужной кодировке
Есть сайт в win-1251, с которым нужно плотно работать. Отправлять POST и GET...

Чтение информации с листа Excel, где есть пустые ячейки
Подскажите как можно выйти из ситуации. Вытаскиваю из excel инфу и такая...

Организовать поиск по двум столбцам по типу LIKE как в SQL, но с использованием LINQ
Доброго времени суток уважаемые форумчане! Вопрос: 1. Есть БД с таблицей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru