2015-08-05 4 views
3

Я работаю в C# с файлами Excel, используя Microsoft.Office.Interop.Excel. Моя проблема в том, что моя программа работает очень медленно. В основном, он выполняет итерацию через ячейки листа Excel и считывает данные в каждой из ячеек.сокращение времени доступа Excel

Я использую следующую команду:

value = (range.Cells[row, col] as Excel.Range).Value2; 

где значение моя переменная, и диапазон является объектом Interop.Excel класса Range.

Есть ли способ входа в Interop для доступа к файлу доступа или другой библиотеке, которую я должен использовать?

+2

Не используйте interop. Используйте OLEDB или библиотеку, например EPPlus, для чтения файла без использования электронной таблицы. –

+1

Используйте 'sheet.get_Range()' для загрузки в память в виде пакета, затем цикл –

+0

. Я столкнулся с этим в начале этого года - пожалуйста, просмотрите обе попытки и обратите внимание, как гораздо быстрее, чем первое: [how-to-open-and-parse-excel-data] (http://stackoverflow.com/questions/28830743/how-to-open-and-parse-excel-data) – jacoblambert

ответ

1

Если возможно, используйте библиотеку, такую ​​как EPPLUS, которая намного быстрее, чем interop, и намного проще программировать.

Если это невозможно из-за внешних ограничений, попробуйте как можно больше уменьшить количество вызовов в режиме interop. Выполнение цикла в excel задает проблемы - поскольку каждая ячейка должна взаимодействовать через interop, а сортировка данных от excel до вашего приложения ходит много времени. Гораздо лучше использовать get_Range(), чтобы получить весь массив за один раз. Единственный запрос займет много времени, но цикл C# очень быстро после этого. В целом, полезно сделать все, что вы можете на стороне C#, даже если excel предложит ту же функциональность.

+0

get_Range(), кажется, не дает лучших результатов, чем sheet.UsedRange. совместим с EPPLUS с Excel 2013? – proton

+0

Да, конечно. EPPLUS не работает с файлами xls, но все xlsx в порядке –

0

Excel Data Reader

Легкий и очень быстро, если чтение ваш единственный случай использования.

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