从RadGridView复制/粘贴到Excel时,日期时间格式错误

时间:2016-06-17 16:09:24

标签: c# excel datetime telerik radgridview

将Telerik的RadGridView中的行复制到excel时出现了一个奇怪的问题,问题与DateTime列有关。

RadGridView中的列格式正确:

06/17/2016 02:30 PM

但是当用户复制行并将它们粘贴到excel时,格式就会搞砸:

2016-06-16 14:30 PM //24hr format with PM period lol

我注意到问题只发生在小时大于12的值上,例如,如果值为06/17/2016 08:54 AM,它将以正确的格式粘贴到Excel中。

因此,我认为它与格式有关,我使用以下代码手动设置列的格式字符串:

dgv_history.Columns["Repair Date"].FormatString = "{0:MM/dd/yyyy HH:mm}";

我也试过

dgv_history.Columns["Repair Date"].FormatString = "{0:MM/dd/yyyy hh:mm tt}";

但是这些代码行只会改变日期在RadGridView中的显示方式,如果我尝试将它们复制/粘贴到excel中,问题仍然存在。

这就是粘贴到excel后的样子:

2016-06-16 13:57 PM
2016-06-16 13:31 PM
6/16/2016 12:55
6/16/2016 12:33
6/16/2016 12:22
6/16/2016 11:48
6/16/2016 11:19

我该怎么做才能解决这个问题?,这是一个错误吗?我一直在搜索他们的文档,但我仍然无法找到任何相关内容。

谢谢

2016年6月20日更新12:15

似乎这是RadGridView的正常功能,如此演示页http://docs.telerik.com/devtools/winforms/gridview/copy-paste-cut中所示  结果与本问题中描述的结果相同。

5 个答案:

答案 0 :(得分:1)

我对这个问题没有真正的答案,但请看一下:

http://docs.telerik.com/devtools/wpf/controls/radgridview/clipboard/copying.html

您可以覆盖复制的值(您可以使用调试器检查telerik写入剪贴板的内容)。

很抱歉将此添加为答案,但我尚未发表评论。

干杯

托马斯

答案 1 :(得分:0)

我在多年前创建时间卡时遇到了类似的问题 - 没有人喜欢使用那种24小时时间格式转换 - 而上午12点/下午可能会引起那些没有注意的人,特别是在复制/粘贴时从24小时到双12小时的格式 - 将数据输入时间转换为基本公式示例中的可计算公式 - 一旦我将12-合并到公式中,我开始公式:= IF(C8> D8,12-C8 + D8,D8-C8然后再将其乘以负值1,之后它自行解决。

答案 2 :(得分:0)

检查客户端电脑的区域设置上的日期时间设置是否正确。只是作为一个建议,如果没有其他工作

答案 3 :(得分:0)

我认为RadGridView生成的日期时间总是像" 2016-06-16 13:57 PM"但是excel通过其内置功能对其进行格式化。这可能是由于缺少" PM"以便Excel添加它并将其转换为默认的日期时间格式。您只需将单元格属性更改为" Text"在复制之前,应始终将数据视为字符串。

答案 4 :(得分:0)

我能够解决问题,但我不得不操纵被添加到剪贴板的数据对象。

当它转变时唯一的问题是在DateTime值的末尾附加了句号,所以为了修复它,我使用以下代码删除了所有日期时间值中的所有句点。

DataObject dataobject = dgv_history.GetClipboardContent();

//Gets the data object as a CSV string
string dos = dataobject.GetText(TextDataFormat.CommaSeparatedValue);

//Replaces all the occurrences of AM & PM with an empty string 
dos = dos.Replace(" AM", string.Empty);
dos = dos.Replace(" PM", string.Empty);

//Sets the modified CSV string as the DataObject
dataobject = new DataObject(dos);

//Adds the DataObject to the clipboard
Clipboard.SetDataObject(dataobject, true);

通过这样做,日期时间被粘贴为格式良好的24小时格式,并由excel检测到。

我能够创建另一个临时解决方案,但涉及我们的SSRS服务器。我使用与RadGridView相同的参数创建了一个简单的报表,报表输出可以作为excel电子表格轻松下载,而不必担心WinFroms控件操纵或翻译数据。

感谢大家的时间和答案。