Работа с xls, цикл, очень долго выполняется - C#
Формулировка задачи:
Доброго времени суток. Помогите пожалуйста у меня такая задача. Вытащить из всех екселевских файлов в выбранном каталоге определенные значения(только цифры и не меньше 4). Мой код работает очень медленно.
Эти значения содержатся в файле на первом листе и в первых двух колонках, максимально 2000 строк.
Мой код:
Сообственно цикл
for (int j = 1; j < 2000; j++)
и выполняется всех дольше, оно и понятно, что 2000 тысячи строк проверить, да еще и регуляркой каждый раз 2 раза.. Но можно ли как-то это дело ускорить?
Заранее спасибо!
//сообственно определяем список файлов в массив 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();
Решение задачи: «Работа с xls, цикл, очень долго выполняется»
textual
Листинг программы
Regex r = new Regex(@"[\S\D]", RegexOptions.Compiled); good = !r.IsMatch(ObjWorkSheet.Cells[j, 1].Text, pattern);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д