2016-11-27 3 views
0

Я пытаюсь прочитать все данные excel в виде массива текста (тот же текст, что и в ячейке).Прочитать диапазон Excel как массив текста (строка, представляющая то, что отображается на экране для ячейки)

Я использую этот код, чтобы преобразовать содержимое первенствовать в массив

Microsoft.Office.Interop.Excel.Range range = excelSheet.get_Range("A1", "P" + excelRowCount); object[,] values = (object[,])(range.Text);

, но я получаю сообщение об ошибке, как не может преобразовать DBNull объекта [,]

код будет работать, если я заменю range.Text с range.Value или range.Value2 Но это не даст правильных данных, например, если данные в ячейке равно 23:00:00 PM, range.Value дает 0.95833333333333337 здесь Мне нужно использовать DateTime.FromOADate() метод для преобразования значения 0.95833333333333337 в 11:00:00 PM

Но если я пойду с excelSheet.Cells[rowNo, columnNo].Text я получить правильный текст, то есть: 11: 00: 00, но это будет замедление процесса, потому что есть 40K записи в листе excel.

Есть ли способ получить точный текст в массиве, например object[,] values = (object[,])(range.Value);, почему range.Text не работает?

ответ

0

От https://fastexcel.wordpress.com/2011/11/30/text-vs-value-vs-value2-slow-text-and-how-to-avoid-it/

Если попытаться получить .text из нескольких ячеек в варианте (Varr = Range («A1: A10») Текст) вы не получите массив результатов. Вместо этого, если все ячейки в диапазоне содержат одно и то же значение, отформатированное таким же образом, вы получаете одно форматированное значение, но если у ЛЮБОГО из ячеек есть разные значения или форматы, вы получаете Null (это может быть полезным трюком).

Эта статья также согласуется с вашими проблемами скорости с .Text каждой ячейкой. Но .Text пытается прочитать много свойств ячейки (включая форматирование даты, которое вы хотите) - вот почему он медленный.

Также имейте в виду, что .Text может возвращать ######, если содержимое ячейки не подходит, поэтому вам необходимо автоподтвердить все столбцы/строки ...