WPF DataGrid中有一个很好的默认功能,可以将选定的单元格复制到剪贴板中,以便在其他应用程序中使用。但似乎复制过程在性能方面需要改进,而且还存在一些...粘贴到Excel时的错误,我想需要修复。
复制错误的步骤(不正确的Excel使用):
A.1)从WPF DataGrid中复制包含文本值和不带前导零的单元格(例如“001”、“002”、“1”、“12345”、“ABC”、“0ABC”)。
A.2)将已复制的数据粘贴到Excel中。预期前导零将被保留,但如果可能的话,Excel会将数字值转换为数字数据格式(默认情况下,单元格数据类型为通用类型)。
复制错误的步骤(正确的Excel使用):
B.1)从WPF DataGrid中复制包含文本值和不带前导零的单元格(例如“001”、“002”、“1”、“12345”、“ABC”、“0ABC”)。
B.2)选择目标Excel文件中的所有单元格并更改单元格数据类型为文本。
B.3)将已复制的数据粘贴到Excel中。它预期前导零将被保留,但它们也消失了!
查看Excel中预期结果的步骤(正确使用Excel):
C.1)从记事本中将相同的数据复制到剪贴板中。
C.2)选择目标Excel文件中的所有单元格并更改单元格数据类型为文本。
C.3)将已复制的数据粘贴到Excel中。预期前导零将被保留,现在它成立了。我们可以看到与源数据相同。所见即所得。
我开始查看剪贴板数据,以找出B.1和C.1之间的差异(我还从Excel中复制了相同的数据并进行了检查...)。通过使用Microsoft提供的C# Clipboard Viewer示例,我发现了以下内容:
从记事本++复制的数据的剪贴板数据格式:
复制错误的步骤(不正确的Excel使用):
A.1)从WPF DataGrid中复制包含文本值和不带前导零的单元格(例如“001”、“002”、“1”、“12345”、“ABC”、“0ABC”)。
A.2)将已复制的数据粘贴到Excel中。预期前导零将被保留,但如果可能的话,Excel会将数字值转换为数字数据格式(默认情况下,单元格数据类型为通用类型)。
复制错误的步骤(正确的Excel使用):
B.1)从WPF DataGrid中复制包含文本值和不带前导零的单元格(例如“001”、“002”、“1”、“12345”、“ABC”、“0ABC”)。
B.2)选择目标Excel文件中的所有单元格并更改单元格数据类型为文本。
B.3)将已复制的数据粘贴到Excel中。它预期前导零将被保留,但它们也消失了!
查看Excel中预期结果的步骤(正确使用Excel):
C.1)从记事本中将相同的数据复制到剪贴板中。
C.2)选择目标Excel文件中的所有单元格并更改单元格数据类型为文本。
C.3)将已复制的数据粘贴到Excel中。预期前导零将被保留,现在它成立了。我们可以看到与源数据相同。所见即所得。
我开始查看剪贴板数据,以找出B.1和C.1之间的差异(我还从Excel中复制了相同的数据并进行了检查...)。通过使用Microsoft提供的C# Clipboard Viewer示例,我发现了以下内容:
从记事本++复制的数据的剪贴板数据格式:
- Text (native)
- UnicodeText (native)
- System.String (autoconvertable)
- Locale (native)
- OEMText (native)
复制自 WPF DataGrid 的数据的剪贴板数据格式:
- HTML Format (native)
- Csv (native)
- Text (native)
- UnicodeText (native)
- System.String (autoconvertable)
从Excel复制的数据的剪贴板数据格式:
- EnhancedMetafile (native)
- System.Drawing.Imaging.Metafile (autoconvertable)
- MetaFilePict (native)
- Bitmap (native)
- System.Drawing.Bitmap (autoconvertable)
- System.Windows.Media.Imaging.BitmapSource (autoconvertable)
- Biff12 (native)
- Biff8 (native)
- Biff5 (native)
- SymbolicLink (native)
- DataInterchangeFormat (native)
- XML Spreadsheet (native)
- HTML Format (native)
- Text (native)
- UnicodeText (native)
- System.String (autoconvertable)
- Csv (native)
- Hyperlink (native)
- Rich Text Format (native)
- Embed Source (native)
- Object Descriptor (native)
- Link Source (native)
- Link Source Descriptor (native)
- Link (native)
- Format129 (native)
那么,解决B.3步骤的好方法或最佳方法是什么呢?目前我考虑了两个选项:
选项#1
找出一种方法来向wpf数据网格解释,它需要以特定格式将数据设置到剪贴板中。
选项#2
第二个选项是使用自己的函数处理Ctrl+C,该函数将运行通过选择的单元格,与数据网格背后的视图进行通信,获取正确的数据,附加到字符串生成器并将文本设置到剪贴板。
那么您认为上述B.3的最佳解决方案是什么?