Kendo 电子表格中的范围值提取将日期更改为整数
Range values extraction in Kendo spreadsheet changes dates to integers
我正在使用 Kendo 电子表格从 Excel 文件导入数据,因此我可以使用 Ajax 回调将其插入 SQL 服务器数据库。 Ajax 回调工作正常,但我确定任何日期字符串都被转换为从基准日期 12/30/1899 开始的整数偏移量。我已经向 Telerik 提交了支持票,但他们似乎不理解这个问题。
数据在 Kendo 电子表格中适当地显示为日期。 Kendo 将日期输入“12/1/2015”转换为“12-1-2015”。
我正在使用最新版本的 ASP.NET MVC 5 包装器,但是 JavaScript 代码是 JavaScript 的 2016-1-226-545 版本。包装器版本似乎无关紧要,但 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 电子表格将日期值存储为从 12/30/1899 开始的整数偏移量(以天为单位)。我通过输入 1/1/1901 的日期来确定“0”值以查看返回的内容,然后是 1/1/1900。后者的结果是“2”,使基准日期为 12/30/1899。获取数据并在服务器上进行转换似乎是最好的选择。我真的不希望 Telerik 有太多回应。
首先,我认为你的意思是 12/31/1899。将任何内容提及 12/30/1899 是没有意义的。
Excel 日期从 1/1/1900 开始,就像您的 Kendo(日语:"the way of the sword")日期一样。如果您得到一个整数,只需格式化列,就可以强制将其强制转换为接收时的相应日期。 "convert" days-since-1900 计数为文本日期 (MM/DD/YYYY) 不需要特定函数,因为它们是相同的,仅在人类可读表示方面有所不同。
当然,从你的描述中并不清楚Excel是问题的输入端还是输出端。
我已经解决了 Telerik 的存储问题,他们已经承认电子表格小部件中存在错误。
目前,解决方案是每次将值数组一行带回服务器并在服务器端进行数据转换。在日期值数组中返回的整数是 Kendo 电子表格在客户端存储信息的方式。格式化列只会改变客户端显示。它不会改变 Kendo returns 从电子表格范围中选择值矩阵的方式。
我正在使用 Kendo 电子表格从 Excel 文件导入数据,因此我可以使用 Ajax 回调将其插入 SQL 服务器数据库。 Ajax 回调工作正常,但我确定任何日期字符串都被转换为从基准日期 12/30/1899 开始的整数偏移量。我已经向 Telerik 提交了支持票,但他们似乎不理解这个问题。
数据在 Kendo 电子表格中适当地显示为日期。 Kendo 将日期输入“12/1/2015”转换为“12-1-2015”。
我正在使用最新版本的 ASP.NET MVC 5 包装器,但是 JavaScript 代码是 JavaScript 的 2016-1-226-545 版本。包装器版本似乎无关紧要,但 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 电子表格将日期值存储为从 12/30/1899 开始的整数偏移量(以天为单位)。我通过输入 1/1/1901 的日期来确定“0”值以查看返回的内容,然后是 1/1/1900。后者的结果是“2”,使基准日期为 12/30/1899。获取数据并在服务器上进行转换似乎是最好的选择。我真的不希望 Telerik 有太多回应。
首先,我认为你的意思是 12/31/1899。将任何内容提及 12/30/1899 是没有意义的。
Excel 日期从 1/1/1900 开始,就像您的 Kendo(日语:"the way of the sword")日期一样。如果您得到一个整数,只需格式化列,就可以强制将其强制转换为接收时的相应日期。 "convert" days-since-1900 计数为文本日期 (MM/DD/YYYY) 不需要特定函数,因为它们是相同的,仅在人类可读表示方面有所不同。
当然,从你的描述中并不清楚Excel是问题的输入端还是输出端。
我已经解决了 Telerik 的存储问题,他们已经承认电子表格小部件中存在错误。
目前,解决方案是每次将值数组一行带回服务器并在服务器端进行数据转换。在日期值数组中返回的整数是 Kendo 电子表格在客户端存储信息的方式。格式化列只会改变客户端显示。它不会改变 Kendo returns 从电子表格范围中选择值矩阵的方式。