Excel PIA Interop работает очень медленно, когда вы делаете что-то по клеткам.
Вы должны выбрать диапазон, который хотите извлечь, как вы сделали со свойством Worksheet.UsedRange
, а затем прочитать значение всего диапазона за один шаг, вызвав get_Value()
(или просто просто прочитав Value
или Value2
свойство, я не могу вспомнить, какое) на нем.
Это даст object[,]
, то есть двумерный массив, который можно легко перечислить и быстро прочитать.
РЕДАКТИРОВАТЬ : Я только что прочитал ваш реальный код и понял, что он действительно делает то, что я предложил. Позор мне, что я не прочитал вопрос правильно, прежде чем ответить. В этом случае вы не можете сделать это намного быстрее. Excel PIA Interop работает медленно. Если вам нужно более быстрое решение, вам придется либо перенести jExcelApi с Java на C # (это не очень сложно), либо использовать какой-либо коммерческий компонент. Я предлагаю избегать интерфейса OLEDB любой ценой, чтобы сохранить ваше здоровье.
Несвязанный, но полезный совет: вы должны использовать ?? оператор. Это действительно удобно. Вместо
data = rangeData[iRow, iCol] != null ? rangeData[iRow, iCol].ToString() : string.Empty;
Вы могли бы просто написать
data = Convert.ToString(rangeData[iRow, iCol]) ?? string.Empty;
В этом случае даже String.Empty не требуется, поскольку Convert.ToString (object) в любом случае null
преобразует в пустую строку.