XlrdでExcelから特定のセル値を読み取るのに問題があります。私が読んでいる値(日付値)はすべて数値に変換されます。 python日付形式に変換するソリューションがあることは知っていますが、xlrdの文字列値を直接読み取ることはできますか?
xlrdは日付をfloatに変換しません。 Excelは日付を浮動小数点数として保存します。
xlrdドキュメント (ページを下にスクロール)からの引用:
Excelスプレッドシートの日付
実際には、そのようなことはありません。あなたが持っているのは浮動小数点数と敬虔な希望です。 Excelの日付にはいくつかの問題があります。
(1)日付は個別のデータ型として保存されません。それらは浮動小数点数として格納され、(a)Excelでそれらに適用される「数値形式」、および/または(b)どのセルに日付が含まれるかを知ることに依存する必要があります。このモジュールは、(a)各数値セルに適用されている形式を検査するのに役立ちます。日付形式のように見える場合、セルは数値ではなく日付として分類されます。
(2)...このパッケージの
xldate_as_Tuple()
関数を使用してワークブックから数値を変換する場合は、datemode
オブジェクトのBook
属性を使用する必要があります。
セルのタイプについては、 セルクラス のセクション、およびセルのタイプ(テキスト、数値、日付、ブール値)を抽出するさまざまな シートメソッド のセクションも参照してください。など)。
他のPython Excelパッケージに関する情報については python-Excel.org をチェックしてください。
まあ、あなたが言うように:
# 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
Excelは、日付を内部と.xlsファイルの両方に数値として保存し、表示時にそれに応じてフォーマットします。したがって、xlrdを使用してそれらを素朴に読むと、数値または文字列のいずれかが得られます。あなたがすべきことは、セルのタイプが何であるかを確認してから、自分で数値を変換することです。 xlrdの組み込み関数(xldate_as_Tuple()
など)または独自の関数を使用します。
詳細については、 この質問 を参照してください。