2013-06-19 36 views
0

我想從使用xlrd模塊的excel文件中讀取日期。下面是我的代碼如下:來自excel的Python閱讀日期拋出錯誤

# Variables 
myfile = '/home/mobaxterm/.git/Operation_Documentation/docs/Servicing Portal User & Certificate Inventory.xlsx' 
mydate = 'Expiration Date' 
row_head = 0 

# Import required modules 
import xlrd 
import datetime 


today = datetime.date.today() 
book = xlrd.open_workbook(myfile) 
sheet = book.sheet_by_index(1) 
for col_index in range(sheet.ncols): 
     print xlrd.cellname(row_head,col_index),"-", 
     print sheet.cell(row_head,col_index).value 
     if sheet.cell(row_head,col_index).value == mydate: 
       for raw_index in range(sheet.nrows): 
         expire = sheet.cell(raw_index,col_index).value 
         print expire 
         expire_date = datetime.datetime(*xlrd.xldate_as_tuple(expire, book.datemode))  
         print 'datetime: %s' % expire_date 
       break 

在運行我收到以下錯誤代碼:

Traceback (most recent call last): 
    File "cert_monitor.py", line 31, in <module> 
    expire_date = datetime.datetime(*xlrd.xldate_as_tuple(expire, book.datemode)) 
    File "/usr/lib/python2.6/site-packages/xlrd/xldate.py", line 61, in xldate_as_tuple 
    xldays = int(xldate) 
ValueError: invalid literal for int() with base 10: 'Expiration Date' 

任何人都可以表明,這可能是這裏的問題?

謝謝你的時間。

+2

您是否將列標題解析爲日期? – RickyA

+0

xlrd.xldate_as_tuple參數的輸出類型:print type(expire),print type(book.datemode);然後查看該函數的文檔:可能其中一個參數的類型錯誤。 – sergzach

+0

你確定你正在顯示第31行的代碼嗎? 'mydate'是唯一一個名稱爲'Expiration Date'的值,並且使用它的行看起來不是問題所在。您可能需要顯示顯示問題的文件的簡化示例。 – dansalmo

回答

1

我認爲,你應該只跳過標題:

for raw_index in range(1, sheet.nrows): 
    ... 

您檢查sheet.cell(row_head,col_index).value == mydate,然後你要遍歷行,但你應該跳過row_head第一 - 這是==mydate,這是不是約會,而是簡單的「過期日期」字符串。

+0

其導致問題的Excel數據的日期轉換。其他代碼工作得很好。 – user2501825

+0

@ user2501825你有沒有試過我的解決方案?你正在嘗試轉換爲日期的* excel數據並不是真正的日期。它是列標題。 – Elazar

+0

呀做出這樣的轉變,我是能夠打印的第一次約會,但仍然拋出了同樣的錯誤,並quits.'python cert_monitor.py A1後 - 服務器名稱 B1 - 任務 C1 - 用戶名 D1 - 目的 E1 - 密碼過期 F1 - 截止日期 41450.0 日期時間:2013年6月25日00:00:00 回溯(最近通話最後一個): 文件 「cert_monitor.py」 31行,在 EXPIRE_DATE = datetime.datetime(* xlrd.xldate_as_tuple(expire,book.datemode)) 文件「/usr/lib/python2.6/site-packages/xlrd/xldate.py」,第61行,在xldate_as_tuple中 xldays = int(xldate) ValueError:對於int()以10爲基數的無效文字:'' ' – user2501825