Опитимазция поиска данных в файле Excel - C#

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

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

Добрый день! Подскажите, как оптимизировать поиск данных в эксель, на данный момент поиск осуществляется вот так
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);
                }
             }
Т.е. банальный перебор всех строк определенного столбца, пока значение в нем не совпадет с искомым, но при файлах размером по 20-30 тысяч строк, и случайностью, что искомое значение находится в конце файла - в итоге программа выполняется по минуте ( а таких поисков выполняется 5), итого 5 минут. Подскажите, возможно есть более быстрый способ осуществить поиск ячейки, с искомым занчением? Заранее спасибо!

Решение задачи: «Опитимазция поиска данных в файле 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

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


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

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

13   голосов , оценка 3.846 из 5