1

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などのExcel固有の関数をいくつか持ち、XLRDを使用して計算された値を読み取ることです。

上記のコードを実行すると、望ましくない次の結果が得られます。-

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

理想的には、2行目で15を取得する必要があります。開いたときにExcelを完全に書き込みますが、XLRDは結果を返しません。私は非常に重要なプロジェクトのためにこれで立ち往生しています。お早めにご返信くださいますようお願い申し上げます。

ありがとう、よろしくTarun Pasrija

4

2 に答える 2

8

これが昨日のpython-excelgoogle-groupでの同じ質問に対する答えです。

[背景:私はxlrdの作成者/保守者であり、xlwtの保守者です]

xlrdもxlwtも、数式評価エンジンを含んでいません。これは、(何らかの意味で)無料でインタプリタ言語で書かれた他のパッケージと共通しています。これは、 http: //www.python-excel.orgからダウンロードできるチュートリアルに記載されています...17ページと36ページを参照してください。

スクリプトを2つに分割する場合は、最初のスクリプトを実行し、結果のXLSファイルをExcel / OOo calc / Gnumericで開き、[再計算するにはここでF9キーを押す必要がある場合があります]、もう一度保存して、2番目のスクリプトを実行します。xlrdが表示されます結果。

その他の可能性:

(1)gnumericメーリングリストで、次の範囲でプログラムでgnumericを駆動できるかどうかを確認します:名前付きXLSファイルを開き、すべての数式を[再]計算し、名前付きXLSファイルとして保存します(再計算された数式の結果が含まれます--it私が最後に尋ねたとき、ネイティブの数値ファイル形式には計算された数式の結果が含まれていなかったため、これを強調する必要があります)。

(2)Openoffice.orgの計算プログラムについて同じ質問をすることができます。おそらくnews:comp.lang.pythonやwww.stackoverflow.comで...「PyUNO」と呼ばれる一連のAPIがあります。前回私が見たとき、ほとんどの人は膨大な量のドキュメントを通り抜けて理解しようとするのをあきらめました。より良いニュースは、Python+スプレッドシートの世界で喜んで受け取られると確信しています。

(3)「LogNormal」(LOGNORMDISTおよび/またはLOGINVを意味すると思います)および「StdDev」はほとんどExcel固有ではありません。Pythonで独自の結果を計算できます。お気づきのように長さがゼロの不変の文字列をプラグインする代わりに、呼び出し元が数式セルの結果値を提供できるように、xlwtを拡張する必要があります。

(4)あなたのより高いレベルの目標を教えてください...それから私たちは他の提案を思い付くことができるかもしれません。

これは学術的/慈善団体/営利企業向けの「非常に重要なプロジェクト」ですか?Resolver One(http://www.resolversystems.com/products/resolver-one/)を検討しましたか?AFAIK、彼らは割引を提供し、彼らの製品はとにかくライセンスあたり約100米ドルで汚れが安いです。

于 2010-11-18T11:33:13.867 に答える
2

2 番目のビットを実行する前に、Excel で開いて再保存する必要があります。xlwt/xlrd は実際には数式自体を計算しないため、それを行うには Excel が必要です。OpenOffice でテストしたところ、ファイルを再保存すると機能します。

また、平均を計算するためだけにこの方法を使用しているのではないことを教えてください。これは Python で非常に簡単に実行できます。

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

(Python 3 では、float() を省略できます)

于 2010-11-16T20:19:52.533 に答える