web-dev-qa-db-ja.com

Python xlrdを文字列として読み取る

XlrdでExcelから特定のセル値を読み取るのに問題があります。私が読んでいる値(日付値)はすべて数値に変換されます。 python日付形式に変換するソリューションがあることは知っていますが、xlrdの文字列値を直接読み取ることはできますか?

12
Rnet

xlrdは日付をfloatに変換しません。 Excelは日付を浮動小数点数として保存します。

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

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

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

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

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

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

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

9
John Machin

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

# 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
7
cMinor

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

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

4
ktdrv