复制Excel数字到剪贴板时的小数精度问题

4

我正在Windows 7 x64下编写MatLab程序,它可以获取从Microsoft Excel复制的混合数据,并将其直接导入MatLab中的单个字符数组中。

在MatLab中使用“str = clipboard('paste')”命令时,所有从Excel中复制的文本数据都是正确的,但数值数据会损失一些小数位。

例如,如果单元格A1包含数字2113.12389881239,但由于单元格格式问题,它只显示值2113.123899,则从Excel复制到MatLab的值是2113.123899而不是实际单元格值2113.12389881239。

我想知道如何复制存储在Excel中的确切单元格值而不是显示的值。

提前感谢。


你不能将单元格格式化为@的原因是什么? - jmac
@jmac 有一个原因。同一个 Excel 文件用于其他目的。因此,将 Excel 的单元格格式更改/强制为文本仅用于数据复制并不是非常有用。 - Transfinito
1个回答

0

给定以下值:.1234567,使用1-7位小数进行格式设置时,当我将其复制粘贴到另一个程序(记事本)中时,我得到以下结果:

0.1 
0.12 
0.123 
0.1235 
0.12346 
0.123457 
0.1234567 

假设你想一次复制一个数字,我用了这个宏:
Sub FormattedCopy()

    Dim oldFormat, copyString As String    

    oldFormat = Selection.NumberFormatLocal

    Selection.NumberFormatLocal = "@"

    Selection.Copy

    MsgBox ("Please paste your data")

    Selection.NumberFormatLocal = oldFormat

End Sub

消息框用于“暂停”进程,因为将数字格式更改回来会清除剪贴板。当我粘贴任何值时,它会在记事本中正确显示为0.1234567

如果您将数字格式的范围保存在数组中并像上面使用for循环一样反馈回去,则可以对一系列值执行此操作。


我知道我有些晚了,但我只是在处理剪贴板小数精度方面遇到了困难。不幸的是,您的答案没有帮助到我;这与小数位数无关(在您的测试中仍然可以使用7个),而是与有效位数的总数有关,OP的"2113.12389881239" 有15位,而简写的"2113.123899" 有10位(仍然比您的7位多)。 - Marius Wallraff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接