Работа с 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);