Проблема XLWT и XLRD - чтение и запись одновременно - PullRequest
1 голос
/ 16 ноября 2010

У меня проблема с xlrd и xlwt. Вставка примера кода ниже.

from xlwt import Workbook, Formula, XFStyle
import xlrd

book = Workbook()
sheet1 = book.add_sheet('Sheet 1')
myFontStyle = XFStyle()
myFontStyle.num_format_str = '0.00'
sheet1.write(0,0,10, myFontStyle)
sheet1.write(0,1,20, myFontStyle)
sheet1.write(1,0,Formula('AVERAGE(A1:B1)'), myFontStyle)
book.save('formula.xls')

wb = xlrd.open_workbook('formula.xls')
sh = wb.sheet_by_index(0)
for rownum in range(sh.nrows):
    print sh.row_values(rownum)

Идея состоит в том, чтобы записать некоторые значения в файл Excel, иметь некоторые превосходства конкретные функции, такие как LogNormal, StdDev и т. д. и читать рассчитанные значения с использованием XLRD.

Запустив приведенный выше код, я получаю следующие результаты: нежелательны: -

[10.0, 20.0]
[u'', '']

В идеале у меня должно быть 15 во втором ряду. Пишет в Excel отлично, когда я открываю его, но XLRD не возвращает результаты. я застрял с этим для очень важного проекта. Прошу вас любезно ответить как можно раньше.

Спасибо и С уважением Тарун Пасрия

Ответы [ 2 ]

8 голосов
/ 18 ноября 2010

Вот ответ, который я вчера дал на тот же вопрос в Google-группе python-excel.

[Фон: я автор / сопровождающий xlrd и сопровождающий xlwt]

Ни xlrd, ни xlwt не содержат механизм оценки формул. Это общее с другими пакетами, которые бесплатны (в любом смысле) и написаны на интерпретируемом языке. Это задокументировано в руководстве, которое вы можете загрузить по http://www.python -excel.org ... см. Стр. 17 и 36.

Если вы разбиваете свой скрипт на две части, выполните первую, откройте XLS-файл результатов с помощью Excel / OOo calc / Gnumeric, [может потребоваться нажать F9 здесь, чтобы пересчитать], сохраните снова, выполните 2-ю часть сценария: xlrd отобразит результаты.

Другие возможности:

(1) Спросите в списке рассылки gnumeric, можно ли программным способом управлять gnumeric: открыть именованный файл XLS, [повторно] вычислить все формулы, сохранить как именованный файл XLS (с учетом результатов пересчитанной формулы - это необходимо подчеркнуть, потому что в прошлый раз, когда я спрашивал, собственный формат файла gnumeric НЕ включал результаты вычисленной формулы).

(2) Вы можете задать тот же вопрос о калькуляционной программе Openoffice.org, возможно, в новостях: comp.lang.python и / или www.stackoverflow.com ... у нее есть набор API под названием "PyUNO"; В прошлый раз, когда я смотрел, большинство людей перестали пытаться пробраться и понять огромное количество документации. Любая лучшая новость, я уверен, будет с благодарностью принята в мире электронных таблиц Python +.

(3) «LogNormal» (я предполагаю, что вы имеете в виду LOGNORMDIST и / или LOGINV) и «StdDev» вряд ли специфичны для Excel. Вы можете рассчитать свои собственные результаты в Python; xlwt нужно будет дополнить, чтобы позволить вызывающей стороне указывать значение результата для ячейки формулы вместо того, чтобы подключать инвариантную строку нулевой длины, как вы заметили.

(4) Скажите нам свои цели более высокого уровня ... тогда мы сможем предложить другие предложения.

Является ли этот "очень важный проект" академическим / для благотворительной организации / для коммерческого предприятия? Рассматривали ли вы Resolver One (http://www.resolversystems.com/products/resolver-one/)? AFAIK, они предлагают скидки, а их продукт в любом случае очень дешев - около 100 долларов США за лицензию.

2 голосов
/ 16 ноября 2010

Вам нужно открыть его в Excel и сохранить заново перед запуском второго бита. xlwt / xlrd на самом деле сами не работают с формулой, поэтому для этого вам понадобится Excel. Я только что протестировал с OpenOffice, и он работает после сохранения файла.

Кроме того, скажите, пожалуйста, вы не используете этот метод только для расчета среднего? Вы можете сделать это в Python очень легко:

average = float(sum(mynumbers))/len(mynumbers)

(В Python 3 вы можете не использовать float ())

...