Десятичная точность при копировании номеров 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.

Другие вопросы по тегам