Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для Alchi09
206 / 135 / 6
Регистрация: 15.11.2009
Сообщений: 1,654

Работа с xls, цикл, очень долго выполняется

25.12.2014, 11:14. Показов 3001. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Помогите пожалуйста у меня такая задача. Вытащить из всех екселевских файлов в выбранном каталоге определенные значения(только цифры и не меньше 4). Мой код работает очень медленно.
Эти значения содержатся в файле на первом листе и в первых двух колонках, максимально 2000 строк.

Мой код:
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
//сообственно определяем список файлов в массив
            string folderName;
            FolderBrowserDialog fbd = new FolderBrowserDialog();
            if (this.textBox1.Text.Length > 1 & Directory.Exists(this.textBox1.Text)){folderName = this.textBox1.Text;}
            else{if (fbd.ShowDialog() == System.Windows.Forms.DialogResult.OK) folderName = fbd.SelectedPath; else return;}
            this.listBox1.Items.Clear();
            string[] allFiles = Directory.GetFiles(folderName, "*.xls");
 
//из каждого файла вытаскиваем значения в массив
            foreach (string i in allFiles)//Start foreach for xls file
            {
 
                Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();                                                                                                                                                      
                Microsoft.Office.Interop.Excel.Workbook ObjWorkBook = ObjExcel.Workbooks.Open(i, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
                string pattern =@"^[\s\d]*$"; bool good;
                List<string> lst = new List<string>();
                for (int j = 1; j < 2000; j++)
                {
                   //так я вытаскиваю с помощью регулярки только нужные мне значения.
                    good = Regex.IsMatch(ObjWorkSheet.Cells[j, 1].Text, pattern);
                    if (good == true){ lst.Add(ObjWorkSheet.Cells[j, 1].Text);}
                    good = Regex.IsMatch(ObjWorkSheet.Cells[j, 2].Text, pattern);
                    if (good == true) { lst.Add(ObjWorkSheet.Cells[j, 2].Text); }
                    Application.DoEvents();
                }
                ObjExcel.Quit();
                lst = lst.Distinct().ToList();
Сообственно цикл
for (int j = 1; j < 2000; j++)
и выполняется всех дольше, оно и понятно, что 2000 тысячи строк проверить, да еще и регуляркой каждый раз 2 раза.. Но можно ли как-то это дело ускорить?

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2014, 11:14
Ответы с готовыми решениями:

Почему если условие входа в цикл не выполняется, функция заново входит в цикл
Сам код: private void traverse_node(TreeControlItem node) { TreeControlItem childNode = default(TreeControlItem);...

Долго выполняется программа и зависает
Программа на C# долго выполняется и зависает при вводе eps вот код: using System; using System.Collections.Generic; using...

Запрос выполняется очень долго
Помагите оптимизировать запрос. Выполняется бесконечно долго (Запрос занял 95.9257 сек.) SELECT sklad.* FROM sklad LEFT JOIN prodal ON...

6
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
25.12.2014, 12:21
Можно. Скопируйте содержимое в буфер обмена - перекиньте его в string[] и проверяйте там. Ускорение будет на порядки.
0
 Аватар для Alchi09
206 / 135 / 6
Регистрация: 15.11.2009
Сообщений: 1,654
25.12.2014, 12:43  [ТС]
freeba, а можно пример, как это делается или ссылку?
0
 Аватар для Konctantin
970 / 773 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
25.12.2014, 12:54
C#
1
object[,] arr = activeSheet.get_Range("A1:B2000").Value;
1
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
25.12.2014, 12:57
Вот в эту тему загляните. Там есть пара быстрых вариантов.
1
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
25.12.2014, 13:49
C#
1
2
Regex r = new Regex(@"[\S\D]", RegexOptions.Compiled);       
good = !r.IsMatch(ObjWorkSheet.Cells[j, 1].Text, pattern);
1
 Аватар для Alchi09
206 / 135 / 6
Регистрация: 15.11.2009
Сообщений: 1,654
25.12.2014, 14:01  [ТС]
Спасибо всем за помощь и наводку)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.12.2014, 14:01
Помогаю со студенческими работами здесь

Очень долго выполняется запрос
Запрос выполняется минут десять. Разве так должно быть? Обрисовываю ситуацию. Берутся две главные таблицы и одна связующая со связями...

Запрос выполняется очень долго
Обращаюсь к специалистам за помощью. Задача, поставленная в данной базе решена. Но последний запрос (запрос2) зависает на 8-10...

Очень долго выполняется запрос SQL
Добрый день! Товарищи, помогите разобраться почему SQL запрос выполняется жутко долго (2,5 минуты) Как и где можно протестировать этот...

Очень долго выполняется curl + https
Вот этот код выполняется 20 секунд! &lt;?php $api_login = '...'; // Логин $api_password = '...'; // Пароль $api_request =...

Простой запрос выполняется очень долго
Здравствуйте. Пишу веб-приложение на asp.net. Выполняется запрос, который просто получает все данные из таблицы. То есть самый простой...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru