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

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Помогите пожалуйста у меня такая задача. Вытащить из всех екселевских файлов в выбранном каталоге определенные значения(только цифры и не меньше 4). Мой код работает очень медленно. Эти значения содержатся в файле на первом листе и в первых двух колонках, максимально 2000 строк. Мой код:
//сообственно определяем список файлов в массив
            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 раза.. Но можно ли как-то это дело ускорить? Заранее спасибо!

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

textual
Листинг программы
Regex r = new Regex(@"[\S\D]", RegexOptions.Compiled);       
good = !r.IsMatch(ObjWorkSheet.Cells[j, 1].Text, pattern);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы