Мне нужно получить данные из файла Excel , чтобы распечатать их в таблице HTML (с использованием MVC, без сетки) и в конечном итоге сохранить их в базе данных.
Отображение между таблицамии Excel выглядит следующим образом:
Excel -> Таблица
Первая строка -> Заголовки таблицы
Другие ячейки -> Данные таблицы
Я использую Interop.Excel библиотека, которая предоставляет методы для работы с файлами Excel в .NET.
С этим кодом я получаю в переменной lworkSheet рабочую таблицу Nth файла Excel:
var lworkSheet = xlWorkBook.Worksheets.get_Item(N);
Давайте предположим, что файл Excel имеет только одну рабочую таблицу (N = 1), я могу использовать свойства, специфичные для рабочей таблицы, чтобы получить строки, столбцы, ячейки и диапазон ,Эти свойства возвращают объекты типа Interop.Excel.Range .
Проблема состоит в том, что строки, столбцы и ячейки возвращают, соответственно, все строки, столбцы и ячейки в файле Excel, а не толькоте, которые заполнены данными.Поэтому для того, чтобы получить данные, которые я делаю (индекс элементов Excel основан на 1):
var lheaders = xlWorkSheet.Rows.get_Item(1);
var lexcelItems = new Excel.Range[xlWorkSheet.Rows.Count, xlWorkSheet.Columns.Count];
for (var i=0; i < xlWorkSheet.Rows.Count; i++)
{
for(var j=0; j < xlWorkSheet.Columns.Count; j++)
{
lexcelItems[i,j] = xlWorkSheet.Cells.get_Item(i+2, j+1);
}
}
Помимо вычислительных затрат на циклическую обработку всех строк и столбцов, это решение по-прежнему неприемлемо, поскольку get_Item () метод возвращает Range объектов !!Чтобы получить элемент в ячейке, я должен использовать метод get_Range (cell_start, cell_end) и указать ячейки в формате «A1», «A2» и т. Д. ...
ВОПРОСЫ:
1) Любой способ идентифицировать последний элемент в строке и столбце?
2) Любой способ получить значение в ячейке без указания диапазона?
3) Любая библиотека, которая реализует Excel.Range приращение ?(т. е. (A1 ++) == A2 и т. д.).
4) Если ничего из вышеперечисленного не выполнимо, существует ли простой способ чтения Excel с помощью OLEDB ?
Спасибо
Франческо