Интерпретация валютных значений Excel - PullRequest
1 голос
/ 24 декабря 2008

Я использую Python для чтения значения валюты из Excel. Возвращенный из range.Value метод - это кортеж, который я не знаю, как анализировать.

Например, ячейка выглядит как $ 548,982, но в python значение возвращается как (1, 1194857614).

Как я могу получить числовую сумму из Excel или как я могу преобразовать это значение кортежа в числовое значение?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 24 декабря 2008

Попробуйте это:

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-байтовое целое число; это фиксированная точка с 4 десятичными разрядами (т. е. 1 представлен 10000). То, что делает моя функция, это взять кортеж из 4-байтовых целых чисел, создать 8-байтовое целое число, используя struct, чтобы избежать проблем со знаком, а затем разделить на константу 10000. Функция использует decimal.Decimal, если доступно, в противном случае она использует плавать.

ОБНОВЛЕНИЕ (на основе комментария): Пока только значения COM-валюты возвращаются в виде двух целочисленного кортежа, так что вы можете проверить это, но нет никаких гарантий, что это всегда будет успешным. Однако, в зависимости от используемой вами библиотеки и ее версии, вполне возможно, что позже, после некоторого обновления, вы будете получать decimal.Decimal s, а не двузначные кортежи.

0 голосов
/ 24 декабря 2008

Я пробовал это с Excel 2007 и VBA. Это дает правильное значение.

1) Попробуйте вставить это значение в новую книгу Excel
2) Нажмите Alt + F11. Получает вас в VBA Editor.
3) Нажмите Ctrl + G. Возвращает вас в ближайшее окно.
4) В появившемся окне введите? Ячейки ("a1"). Значение
здесь «a1» - это ячейка, в которую вы вставили значение.

Я сомневаюсь, что ячейка имеет какое-то значение или символ, из-за которого она интерпретируется таким образом.

Опубликуйте свои наблюдения здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...