copy/paste 从 RadGridView 到 Excel 时日期时间格式错误
Wrong DateTime format when copy/paste from RadGridView into Excel
我在将 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 中的显示方式,如果我尝试 copy/paste 将它们 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
结果与此问题中描述的结果相同。
我对这个问题没有真正的答案,但可以看看:
http://docs.telerik.com/devtools/wpf/controls/radgridview/clipboard/copying.html
您可以覆盖复制的值(并且您可以使用调试器检查 telerik 正在向剪贴板写入什么)。
很抱歉将此添加为答案,但我还不能 post 发表评论。
干杯
托马斯
几年前我在创建时间卡时遇到了类似的问题 - 没有人喜欢使用 24 小时制时间格式转换 - 而 12 小时制 am/pm 可能会让那些不注意的人感到困惑,尤其是当 copy/pasting 从 24 小时格式到双 12 小时格式 - 在基本公式示例中将数据输入时间转换为可计算公式 - 一旦我将 12- 合并到我开始公式的公式中:=IF(C8>D8 ,12-C8+D8,D8-C8 然后乘以负数 1 之后它自己解决了。
检查客户端电脑区域设置中的日期时间设置是否正确。如果没有别的办法,就作为一个建议
我认为 RadGridView 生成的日期时间总是类似于“2016-06-16 13:57 下午”,但是 excel 通过其内置功能对其进行格式化。这可能是由于缺少 "PM" 导致 Excel 添加它并将其转换为默认日期时间格式。您可以在复制之前将单元格 属性 更改为 "Text",这应该始终将您的数据视为字符串。
我能够解决问题,但我不得不操作添加到剪贴板的数据对象。
唯一的问题是在 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 控件操纵或翻译。
感谢大家的时间和回答。
我在将 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 中的显示方式,如果我尝试 copy/paste 将它们 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 结果与此问题中描述的结果相同。
我对这个问题没有真正的答案,但可以看看:
http://docs.telerik.com/devtools/wpf/controls/radgridview/clipboard/copying.html
您可以覆盖复制的值(并且您可以使用调试器检查 telerik 正在向剪贴板写入什么)。
很抱歉将此添加为答案,但我还不能 post 发表评论。
干杯
托马斯
几年前我在创建时间卡时遇到了类似的问题 - 没有人喜欢使用 24 小时制时间格式转换 - 而 12 小时制 am/pm 可能会让那些不注意的人感到困惑,尤其是当 copy/pasting 从 24 小时格式到双 12 小时格式 - 在基本公式示例中将数据输入时间转换为可计算公式 - 一旦我将 12- 合并到我开始公式的公式中:=IF(C8>D8 ,12-C8+D8,D8-C8 然后乘以负数 1 之后它自己解决了。
检查客户端电脑区域设置中的日期时间设置是否正确。如果没有别的办法,就作为一个建议
我认为 RadGridView 生成的日期时间总是类似于“2016-06-16 13:57 下午”,但是 excel 通过其内置功能对其进行格式化。这可能是由于缺少 "PM" 导致 Excel 添加它并将其转换为默认日期时间格式。您可以在复制之前将单元格 属性 更改为 "Text",这应该始终将您的数据视为字符串。
我能够解决问题,但我不得不操作添加到剪贴板的数据对象。
唯一的问题是在 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 控件操纵或翻译。
感谢大家的时间和回答。