2016-07-13 11 views
0

Я использую электронную таблицу Kendo для импорта данных из файла Excel, чтобы я мог подключить их к базе данных SQL Server с помощью обратных вызовов Ajax. Обратные вызовы Ajax работают нормально, но я решил, что любые строки Date преобразуются в целочисленное смещение от базовой даты 12/30/1899. Я отправил билет поддержки Telerik, но они, похоже, не понимают проблему.Извлечение значений значений в таблице таблиц Kendo меняет даты на целые числа

Данные отображаются в электронной таблице Kendo соответствующим образом в качестве даты. Kendo конвертирует ввод данных как «12/1/2015» в «12-1-2015».

Я использую последнюю версию обертки ASP.NET MVC 5, но код JavaScript - это версия 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 и использовать простую кнопку с рутинным нажмите, чтобы скопировать данные к string array для отправки на обратный вызов 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 сохраняет значения даты как целочисленное смещение от 12/30/1899 в днях. Я определил значение «0», введя дату 1/1/1901, чтобы узнать, что вернулось, а затем 1/1/1900. Результатом последнего было «2», что сделало базовую дату 12/30/1899. Лучше всего использовать данные и преобразовать их на сервере. На самом деле я не ожидаю большой реакции от Telerik.

ответ

0

Я рассмотрел проблему хранения с помощью Telerik, и они подтвердили, что в виджет электронной таблицы есть ошибка.

В настоящее время решение состоит в том, чтобы принести значения массива по одной строке за один раз назад на сервер и выполнить преобразование данных на стороне сервера. Целое число, возвращаемое в массиве значений для дат, - это способ, которым электронная таблица Kendo хранит информационную клиентскую сторону. Форматирование столбца просто не будет делать ничего, кроме изменения клиентского дисплея. Он не изменит, как Kendo возвращает матрицу значений из выбранного диапазона электронных таблиц.

-1

Во-первых, я думаю, вы имеете в виду 12/31/1899. Нет смысла ссылаться на 12/30/1899.

Excel датируется 1/1900, точно так же как и ваши кендо (японский язык: «путь меча»). Если вы получаете целое число, принудительно принуждаете его к соответствующей дате получения, просто создавая COLUMN. Нет необходимости в какой-либо конкретной функции «конвертировать» дни с 1900 года в текстовые даты (MM/DD/YYYY), так как они являются ТОЛЬКО, отличающиеся только понятным для человека представлением.

Конечно, из вашего описания было неясно, был ли Excel со стороны ввода или с выходной стороной проблемы.

+0

Я протестировал его. Я преобразовал целое число обратно в дату, используя open_date = basedate.AddDays (offset), где offset - Double.Parse of integer. Он работает нормально. Основная дата - 12/30/1899. Проверьте свою математику снова. 1/1/1900 имеет целочисленное значение 2. Я использовал начальную дату как DateTime basedate = new DateTime (1899, 12, 30); –

+0

Вопрос очень ясен, что я создаю простую, пустую таблицу kendo и импортирую файл excel. Затем я вызываю javascript-процедуру с обратным вызовом ajax для отправки содержимого электронной таблицы на сервер для хранения в базе данных. Осталось несколько деталей, но они могут различаться в зависимости от базы данных excel, которую вы импортируете. Данные отправляются как простой строковый массив на сервер. Что касается вещей, имеющих смысл с Kendo, вам нужно больше работать с материалами Telerik, чтобы понять, что очень мало смысла, начиная с их документации. –

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

  • Нет связанных вопросов^_^