Ускорить работу с Excel - C#

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

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

Листинг программы
  1. Excel.Application xlApp = new Excel.Application(); //Excel
  2. xlApp.ScreenUpdating = false;
  3. Excel.Workbook xlWB; //рабочая книга
  4. Excel.Worksheet xlSht; //лист Excel
  5. xlWB = xlApp.Workbooks.Open(@"D:\test1223.xlsx"); //название файла Excel
  6. xlSht = xlWB.Sheets[1]; //название листа или можно так если лист первый по порядку - xlWB.Sheets[1];
  7. int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А
  8. for (int i = iLastRow; i >= 2; i--)
  9. {
  10. if (xlSht.Cells[i, 2].Value.ToString().Length < 8)
  11. {
  12. xlSht.Rows[i].Delete();
  13. }
  14. }
  15. xlApp.ScreenUpdating = true;
  16. xlWB.Close(true); //закрываем книгу, сохраняя изменения
Удаляю все строки из таблицы, если в столбце B символов меньше чем 8. Таблица больше 100к строк, поэтому код работает ну очень долго. Подскажите пожалуйста как можно ускорить? думал сделать 2 потока в одном перебирать первую половину строк, во втором вторую, но не смог это реализовать

Решение задачи: «Ускорить работу с Excel»

textual
Листинг программы
  1. using System;
  2. using System.Windows.Forms;
  3. using Excel = Microsoft.Office.Interop.Excel;
  4.  
  5. namespace TestExcel
  6. {
  7.     public partial class Form1 : Form
  8.     {
  9.         public Form1()
  10.         {
  11.             InitializeComponent();
  12.         }
  13.  
  14.         private void button1_Click(object sender, EventArgs e)
  15.         {
  16.             Excel.Application xlApp = new Excel.Application(); //Excel
  17.             Excel.Workbook xlWB; //рабочая книга            
  18.             Excel.Worksheet xlSht; //лист Excel            
  19.             Excel.Range Rng; //диапазон ячеек            
  20.  
  21.             xlWB = xlApp.Workbooks.Open(@"C:\C#\Test Excel.xlsx"); //название файла Excel                                
  22.             xlSht = xlWB.Worksheets["Лист1"]; //название листа или 1-й лист в книге xlSht = xlWB.Worksheets[1];
  23.             int iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row;  //последняя заполненная строка в столбце А
  24.             var arrData = (object[,])xlSht.Range["A1:A" + iLastRow].Value; //берём данные с листа Excel          
  25.             object[,] arrResult = new object[arrData.GetUpperBound(0), arrData.GetUpperBound(1)]; //указываем размер нового массива            
  26.  
  27.             int iCol = 1; //предполагаем, что у нас лишь 1 столбец с данными в нашем примере
  28.             int iRowInResultArray = 0;
  29.             for (int iRow = 1; iRow <= arrData.GetUpperBound(0); iRow++) //цикл по строкам
  30.             {
  31.                 if (arrData[iRow, iCol] != null) //если ячека не пустая
  32.                 {
  33.                     if (arrData[iRow, iCol].ToString().Length > 8) //наше условие - длина больше 8
  34.                     {
  35.                         iRowInResultArray ++;
  36.                         arrResult[iRowInResultArray, 0] = arrData[iRow, iCol].ToString(); //перекладываем данные с общего массива в чистый массив
  37.                     }
  38.                 }
  39.             }
  40.             //xlSht.Cells.Clear();//удаляем данные со всего листа            
  41.             xlSht.Range["B1"].Resize[arrResult.GetUpperBound(0), arrResult.GetUpperBound(1)+1].Value = arrResult; //выгрузка результата на лист
  42.             //можно выгрузить в новый книгу
  43.             //xlWB = xlApp.Workbooks.Add(); //создаём новую книгу
  44.             //xlWB.Worksheets[1].Range["A1"].Resize[arrResult.GetUpperBound(0), arrResult.GetUpperBound(1) + 1].Value = arrResult; //выгрузка результата на лист
  45.  
  46.             xlApp.Visible = true; //отображаем Excel
  47.             MessageBox.Show("Конец!", "Программа", MessageBoxButtons.OK, MessageBoxIcon.Information);
  48.         }
  49.     }
  50. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут