Я использую электронную таблицу Kendo для импорта данных из файла Excel, чтобы я мог подключить ее к базе данных SQL Server, используя обратные вызовы Ajax. Обратные вызовы Ajax работают нормально, но я определил, что любые строки даты преобразуются в целочисленное смещение от базовой даты 30.12.1899. Я отправил запрос в службу поддержки Telerik, но они, похоже, не понимают проблемы.
Данные отображаются в электронной таблице кендо соответствующим образом в виде даты. Кендо преобразует ввод даты как «1/12/2015» в «12-1-2015».
Я использую последнюю версию оболочки ASP.NET MVC 5, но код JavaScript — это версия JavaScript 2016-1-226-545. Версия оболочки, кажется, не имеет значения, но в более поздних версиях JavaScript есть gulpfile.js, и это конфликтует с интерфейсом Bundleconfig в моем проекте ASP.NET MVC 5, поэтому я просто работаю с последней версией JavaScript, которая работает для моя установка.
Электронная таблица, с которой я работаю, довольно проста для начала:
@(
Html.Kendo().Spreadsheet()
.Name("SiteSlotDataSS")
.Rows(10)
.Columns(4).ColumnWidth(100)
.Sheets(sheets =>
{
sheets.Add()
.Name("Study Data");
}
)
)
Я использую параметр импорта, чтобы извлечь электронную таблицу Excel, и использую простую кнопку с подпрограммой события щелчка, чтобы скопировать данные в массив строк для отправки в обратный вызов Ajax. Я подтвердил, что данные, отправляемые на контроллер сервера, такие же, как и на стороне клиента перед отправкой. Преобразование даты в целое число происходит, когда значения извлекаются из диапазона.
Рассматриваемый код, который выбирает значения:
values = sheet.range("A" + headerRows.toString() + ":" + endRange + (headerRows + rows).toString()).values();
Это дает правильный перевод всех остальных столбцов, кроме столбцов, содержащих даты.
Я пробовал следующее, чтобы решить проблему, но безуспешно:
for (var x = 0; x <= rows; x++) {
sheet.range("K" + (headerRows + x).toString()).format(kendo.spreadsheet.formatting.date);
}
Я мог бы попробовать функцию даты, чтобы преобразовать дату обратно в исходное значение, но все в значительной степени знают, что документация Telerik немного скудна и в целом просто кошмар, чтобы найти ответы на вопросы.
Каково решение?
Похоже, что Kendo Spreadsheet хранит значения дат в виде целочисленного смещения от 30.12.1899 в днях. Я определил значение «0», введя дату 01.01.1901, чтобы увидеть, что вернулось, затем 01.01.1900. Результатом последнего было «2», что делает базовую дату 30.12.1899. Получение данных и преобразование их на сервере кажется лучшим вариантом. Я действительно не ожидаю особого ответа от Телерика.