12

xlrd で Excel から特定のセルの値を読み取ることができません。私が読んでいる値 (日付値) は、数値に変換されています。それをPythonの日付形式に変換する解決策があることは知っていますが、xlrdで文字列値を直接読み取ることはできますか?

4

3 に答える 3

10

xlrd は日付を float に変換しません。Excel は日付を float として格納します。

xlrd ドキュメントからの引用(ページを下にスクロール):

Excel スプレッドシートの日付

実際には、そのようなことはありません。あなたが持っているのは、浮動小数点数と敬虔な希望です。Excel の日付にはいくつかの問題があります。

(1) 日付は別のデータ型として保存されません。それらは浮動小数点数として保存され、(a) Excel で適用される「数値形式」および/または (b) どのセルに日付が含まれているかを知る必要があります。このモジュールは、(a) 各数値セルに適用された形式を検査することによって役立ちます。日付形式のように見える場合、セルは数値ではなく日付として分類されます。

(2) ... このパッケージのxldate_as_tuple()関数を使用してワークブックから数値を変換する場合datemode、オブジェクトの属性を 使用する必要がありBookます。

セルのタイプと、セルのタイプ (テキスト、数値、日付、ブール値など) を抽出するさまざまなSheet メソッドについて学習するには、 Cell クラスのセクションも参照してください。

他の Python Excel パッケージの情報については、python-excel.orgをチェックしてください。

于 2011-04-18T20:50:13.133 に答える
7

まあ、あなたが言うように:

# reading from a xls file (no .xlsx files, no writing!)
import xlrd  # install xlrd from  http://pypi.python.org/pypi/xlrd

wb = xlrd.open_workbook("YOUR_FILE.xls")  # xls file to read from
sh1 = wb.sheet_by_index(0) # first sheet in workbook
sh2 = wb.sheet_by_name('colors') # sheet called colors

# print all rows in first sheet
print "content of", sh1.name # name of sheet
for rownum in range(sh1.nrows): # sh1.nrows -> number of rows (ncols -> num columns) 
    print sh1.row_values(rownum)

# rowx and colx (x for Excel) start at 1!
print "row3 col 2:", sh1.cell(rowx=3,colx=2).value

col = sh1.col_values(0)  # column 0 as a list of string or numbers
print '"A" column content:' # python index 0, 1.colunm, called A 
for cell in col: print cell
print sh1.col_values(1) # 2. column, note mix of string (header) and numbers!

この例では、XLS は次のとおりです。

シート 1:リスト

name            latitude longitude   status  color   date
Mount Hood      45.3736  121.6925    active  red     01-ene-01
Mount Jefferson 44.6744  121.7978   dormant yellow  23-sep-05
Three-Fingered  44.478   121.8442   extinct green   
Mount Washington 4.3325  121.8372   extinct green   
South Sister    44.1036  121.7681   active  red 
Diamond Peak    43.5206  122.1486   extinct green   
Mount Thielsen  43.1531  122.0658   extinct green   
Mount Scott     42.923   122.0163   dormant yellow  
Mount McLoughlin 2.445   122.3142   dormant yellow  

シート 2:色

status  color
active  red
dormant yellow
extinct green
于 2011-04-18T19:30:34.183 に答える
4

Excel は、日付を内部と .xls ファイルの両方に数値として保存し、表示時にそれに応じて書式設定します。したがって、xlrdで単純に読み取ると、数値または文字列のいずれかが得られます。あなたがすべきことは、セルのタイプが何であるかを確認してから、自分で数値を変換することです. xlrd の組み込み関数 ( など) を使用するxldate_as_tuple()、独自の関数を使用します。

詳細については、この質問を参照してください。

于 2011-04-18T20:39:36.570 に答える