Вопрос

Я использую 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.Decimals, а не кортежи из двух целых чисел.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top