Интерпретация значений валют Excel
Вопрос
Я использую Python для чтения значения валюты из Excel.Возвращаемый из метода range.Value представляет собой кортеж, который я не знаю, как анализировать.
Например, ячейка отображается как $548 982, но в Python значение возвращается как (1, 1194857614).
Как я могу получить числовую сумму из Excel или как преобразовать это значение кортежа в числовое значение?
Спасибо!
Решение
Попробуй это:
import struct
try: import decimal
except ImportError:
divisor= 10000.0
else:
divisor= decimal.Decimal(10000)
def xl_money(i1, i2):
byte8= struct.unpack(">q", struct.pack(">ii", i1, i2))[0]
return byte8 / divisor
>>> xl_money(1, 1194857614)
Decimal("548982.491")
Деньги в Microsoft COM — это 8-байтовое целое число;это фиксированная точка с четырьмя десятичными знаками (т.е.1 обозначается 10000).Моя функция берет кортеж из 4-байтовых целых чисел, создает 8-байтовое целое число, используя структуру, чтобы избежать каких-либо проблем со знаком, а затем делит его на константу 10000.Функция использует decimal.Decimal, если доступно, в противном случае используется число с плавающей запятой.
ОБНОВЛЕНИЕ (на основе комментария):Пока что в виде кортежа из двух целых чисел возвращаются только значения COM Currency, поэтому вы можете проверить это, но нет никаких гарантий, что это всегда будет успешным.Однако, в зависимости от используемой вами библиотеки и ее версии, вполне возможно, что позже, после некоторого обновления, вы получите decimal.Decimal
s, а не кортежи из двух целых чисел.
Другие советы
Я попробовал это с Excel 2007 и VBA.Он дает правильное значение.
1) Попробуйте вставить это значение в новую книгу Excel.
2) Нажмите Alt + F11.Переход к редактору VBA.
3) Нажмите Ctrl+G.Получает вас к немедленному окну.
4) В ближайшем окне введите ?cells("a1").Value
здесь «a1» — это ячейка, в которую вы вставили значение.
Я сомневаюсь, что ячейка имеет какое-то значение или характер, из-за которого она интерпретируется таким образом.
Публикуйте свои наблюдения здесь.