Десятичная точность при копировании номеров Excel в буфер обмена
Я пишу программу MatLab под Windows 7 x64, которая берет буфер обмена со смешанными данными, скопированными из Microsoft Excel, и импортирует их непосредственно в MatLab в один массив символов.
Когда я использую str = clipboard('paste') в MatLab, все текстовые данные, скопированные из Excel, в порядке, но скопированные числовые данные теряют некоторые десятичные разряды.
Например, если ячейка A1 содержит номер 2113.12389881239, но отображает только значение 2113.123899 из-за форматирования ячейки, тогда 2113.123899 копируется из excel в MatLab вместо действительного значения ячейки 2113.12389881239.
Я хотел бы знать, как скопировать точное значение ячейки, хранящейся в Excel, а не отображаемое значение.
Заранее спасибо.
1 ответ
Учитывая следующее значение: .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.