Опитимазция поиска данных в файле Excel - C#
Формулировка задачи:
Добрый день!
Подскажите, как оптимизировать поиск данных в эксель, на данный момент поиск осуществляется вот так
Т.е. банальный перебор всех строк определенного столбца, пока значение в нем не совпадет с искомым, но при файлах размером по 20-30 тысяч строк, и случайностью, что искомое значение находится в конце файла - в итоге программа выполняется по минуте ( а таких поисков выполняется 5), итого 5 минут.
Подскажите, возможно есть более быстрый способ осуществить поиск ячейки, с искомым занчением?
Заранее спасибо!
Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet; ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1]; for (int i = 1; done; i++) { if (ObjWorkSheet.get_Range("J" + i).Text.ToString().Trim() == refnumber.Trim()) { done = false; range = ObjWorkSheet.get_Range("L" + i); } }
Решение задачи: «Опитимазция поиска данных в файле Excel»
textual
Листинг программы
#region Save private void createOleNewBook(string fileName) { try { string ConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=NO\"; Data Source={0}", fileName); OleDbConnection myODCon = new OleDbConnection(ConnectionString); myODCon.Open(); OleDbCommand myOleDbCommand = new OleDbCommand(); myOleDbCommand.Connection = myODCon; myOleDbCommand.CommandText = String.Format("CREATE TABLE [Лист1] ({0})", getSaveCommandData(-1)); myOleDbCommand.ExecuteNonQuery(); for (int i = 0; i < resDS.Tables[0].Rows.Count; i++) { myOleDbCommand.CommandText = String.Format("INSERT INTO [Лист1$] values ({0})", getSaveCommandData(i)); myOleDbCommand.ExecuteNonQuery(); } myODCon.Close(); MessageBox.Show("Файл сохранен"); } catch { } } public string getSaveCommandData(int rowIndex) { for (int i = 0; i < resDS.Tables[0].Columns.Count-1; i++) { data += String.Format("{0}", rowIndex!=-1 ? getValue(resDS, i, rowIndex) +", " : (i+1)+" integer, "); } data += String.Format("{0}", rowIndex != -1 ? getValue(resDS, resDS.Tables[0].Columns.Count-1, rowIndex).ToString() : (resDS.Tables[0].Columns.Count) + " integer"); return data; } #endregion
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д