Kendo电子表格中的范围值提取将日期更改为整数

时间:2016-07-13 16:25:03

标签: kendo-ui kendo-asp.net-mvc kendo-ui-mvc

我正在使用Kendo电子表格从Excel文件导入数据,因此我可以使用Ajax回调将其插入SQL Server数据库。 Ajax回调工作正常,但我已确定任何Date字符串正在转换为基准日期12/30/1899的整数偏移量。我已经向Telerik提交了一张支持票,但他们似乎并不理解这个问题。

数据作为日期适当地显示在Kendo电子表格中。剑道将日期输入转换为" 12/1/2015"到" 12-1-2015"。

我使用的是最新版本的ASP.NET MVC 5包装器,但JavaScript代码是2016-1-226-545版本的JavaScript。包装器版本似乎无关紧要,但JavaScript的后续版本有gulpfile.js,这与我的ASP.NET MVC 5项目中的Bundleconfig接口冲突,因此我只使用适用于的最新版本的JavaScript我的设置。

我正在使用的电子表格非常基础:

@(
Html.Kendo().Spreadsheet()
.Name("SiteSlotDataSS")
  .Rows(10)
  .Columns(4).ColumnWidth(100)
  .Sheets(sheets =>
  {
   sheets.Add()
     .Name("Study Data");
  }
  )
)

我使用导入选项拉入Excel电子表格并使用带有单击事件例程的简单按钮将数据复制到字符串数组以发送到Ajax回调。我已经确认发送到服务器控制器的数据与发送前的客户端数据相同。当从范围中提取值时,会将Date转换为整数。

选择值的相关代码是:

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(以天为单位)的整数偏移量。我确定了&#34; 0&#34;通过输入1/1/1901的日期来查看返回的值,然后是1/1/1900。后者的结果是&#34; 2&#34;,使基准日期为12/30/1899。获取数据并在服务器上转换它似乎是最好的选择。我真的不期待Telerik的回复。

2 个答案:

答案 0 :(得分:0)

我已经解决了Telerik的存储问题,他们已经承认电子表格小部件中存在错误。

目前,解决方案是将值数组一次一行地带回服务器并进行数据转换服务器端。日期的values数组中返回的整数是Kendo Spreadsheet存储客户端信息的方式。格式化列根本不会做任何事情,只能更改客户端显示。它不会改变Kendo从所选电子表格范围返回值矩阵的方式。

答案 1 :(得分:-1)

首先,我认为你的意思是12/31/1899。将任何内容引用到12/30/1899是没有意义的。

Excel日期从1/1/1900开始,就像你的剑道(日语:“剑的方式”)日期一样。如果你得到一个整数,只需格式化列强制它强制接收到相应的日期。没有必要使用特定的功能将1900年以来的天数“转换”为文本日期(MM / DD / YYYY),因为它们是相同的,仅在人类可读的表示方式上有所不同。

当然,从您的描述中不清楚Excel是在问题的输入端还是输出端。