【问题标题】:Range values extraction in Kendo spreadsheet changes dates to integers剑道电子表格中的范围值提取将日期更改为整数
【发布时间】:2016-07-13 16:25:02
【问题描述】:

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

数据在 Kendo 电子表格中适当地显示为日期。 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 回调。我已经确认发送到服务器控制器的数据与发送前在客户端的数据相同。从范围中提取值时,会发生日期到整数的转换。

选择值的代码是:

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 电子表格似乎将日期值存储为从 1899 年 12 月 30 日开始的整数偏移量(以天为单位)。我通过输入 1901 年 1 月 1 日的日期来确定“0”值以查看返回的日期,然后是 1900 年 1 月 1 日。后者的结果是“2”,使基准日期为 1899 年 12 月 30 日。获取数据并在服务器上进行转换似乎是最好的选择。我对 Telerik 的回应并不抱太大希望。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      首先,我认为您的意思是 1899 年 12 月 31 日。提及 1899 年 12 月 30 日是没有意义的。

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

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

      【讨论】:

      • 我测试过了。我使用 open_date=basedate.AddDays(offset) 将整数转换回日期,其中 offset 是整数的 Double.Parse。它工作正常。基准日期是 1899 年 12 月 30 日。再次检查你的数学。 1/1/1900 的整数值为 2。我使用初始日期作为 DateTime basedate = new DateTime(1899, 12, 30);
      • 问题很清楚,我创建了一个简单的空剑道电子表格并导入了一个excel文件。然后我调用一个带有 ajax 回调的 javascript 例程,将电子表格的内容发送到服务器以存储在数据库中。遗漏了一些细节,但这些细节可能因您导入的 excel 数据库而异。数据作为一个简单的字符串数组发送到服务器。至于对 Kendo 有意义的事情,您需要更多地使用 Telerik 的东西来理解这几乎没有意义,从他们的文档开始。
      • @TimothyDooling 你能回答这个问题吗stackoverflow.com/questions/66219449/…
      猜你喜欢
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多