2015-10-02 3 views
0

Я пытаюсь объединить 3 файла Excel вместе по строкам в столбце.C# Объединение файлов Excel

Я использую EPPlus .NET библиотека, которая отлично работает, но она очень медленная.

Мне нужно проверить строку за строкой, чтобы найти соответствующее значение в других файлах Excels. Вот мой код:

for (int i = 3; i <= excelWorksheetVar.Dimension.End.Row; i++) 
{ 
      for (int j = 3; j <= excelWorksheetBefore.Dimension.End.Row; j++) 
      { 
       if (excelWorksheetVar.Cells[i, 3].Text == excelWorksheetBefore.Cells[j, 1].Text) 
       { 
        excelWorksheetBefore.Cells[j, 2, j, 4].Copy(excelWorksheetVar.Cells[i, 8, i, 10]); 
        excelWorksheetBefore.Cells[j, 6, j, 9].Copy(excelWorksheetVar.Cells[i, 11, i, 14]); 
       } 
       if (excelWorksheetVar.Cells[i, 3].Text == excelWorksheetAfter.Cells[j, 1].Text) 
       { 
        excelWorksheetAfter.Cells[j, 2, j, 4].Copy(excelWorksheetVar.Cells[i, 15, i, 17]); 
        excelWorksheetAfter.Cells[j, 6, j, 9].Copy(excelWorksheetVar.Cells[i, 18, i, 21]); 
        break; 
       } 
      } 

}

Я выборка всех строк из колонки 3 в моем первом Excel файл excelWorksheetVar и пытаюсь найти соответствующее значение в первом столбце второго Excel файл excelWorksheetBefore и тот же с третьим файлом Excel excelWorksheetAfter. Если значение найдено, оно записывает некоторые столбцы строки в первом файле Excel.

Что было бы самым быстрым способом, если бы файлы имели длину около 300 тыс. Строк? Я думаю о преобразовании в DataTable или что-то подобное.

+0

«Я думал о преобразовании в DataTable или нечто подобное.» Да, сделайте это. – Ben

ответ

0

С таким количеством рядов EPPlus будет медленно загружаться независимо от того, как он будет загружать все их в память. Но если этот счет распределяется по трем файлам, по крайней мере, вы можете загружать их по одному в таблицы данных. Если вы попробуете его с помощью метода, который вы сейчас делаете, тогда ВСЕ 300K нужно будет удерживать в ram и перекрестке ссылки - очень дорого и может даже закончиться нехваткой памяти.

Вы можете загрузить их в таблицы или даже словаря, используя что-то вроде этого:

Get all the cell values from excel using EPPlus

Смежные вопросы