2012-01-18 69 views
5

嗯,我有一個問題,我覺得我已經回答了幾次,從我在這裏找到的。然而,作爲一個新手,我無法真正理解如何執行一個真正的基本操作。Python xlrd:如何轉換提取的值?

事情是這樣的:

  • 我有一個.xls,當我使用xlrd得到我只是用 sh.cell(0,0)值(假設SH是我的表);

  • 如果什麼是在細胞是一個字符串我得到的東西像text:u'MyName',我只想保留字符串'MyName';

  • 如果單元格中有什麼是一個數字,我得到類似number:201.0的東西,我只想保留整數201

如果有人能指出我應該只提取值,格式化爲我想要的,謝謝。

回答

12

sh.cell(x,y)返回Cell類的一個實例。當您打印sh.cell(x,y)時,您將返回該類的功能(因此它會打印類型:值)。

你應該嘗試:

cell = sh.cell(x,y) 
print(cell.value) 

我不能對此進行測試,因爲我沒有xlrd,但是,我認爲它會工作給予的文檔:https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html#sheet.Cell-class

+0

也,它會返回值屬性字符串的Unicode版本,所以你可能會需要解碼,如果你只想「MYNAME」這取決於你想用u'MyName'來做。 – comamitc 2012-01-18 12:22:05

+0

非常感謝。有用! – clowny 2012-01-18 12:36:48

+0

@comamitc:如果你有unicode並且你想要字節,你*編碼*,而不是*解碼*。但對於許多事情來說,使用unicode可能更有意義。 – 2012-01-18 12:50:09

2

你也可以提取使用xlrd值而不是得到充分Excel單元格返回:

book = xlrd.open_workbook('example.xls') 
first_sheet = book.sheet_by_index(0) 
print first_sheet.row_values(0) 

獲取你在第一頁的第一行的值。

您可以使用具有row_values的切片(對於列也是類似的)。所以要從整個表中獲取值:

cells = [] 
for i in range(first_sheet.nrows): 
    cells.append(first_sheet.row_values(rowx=i,start_colx=0,end_colx=None)) 

可能有更多優雅的方式來使用xlrd - 但這對我很有用。

0

正確的答案是簡單地使用Cell.value函數。這將根據單元格包含的內容返回一個數字或一個Unicode字符串。

0

這將爲您提供Excel中單元格內容的值。

var = sh.cell(x,y) 
    print var.value 

但是這種數據的類型仍然是'unicode'。要轉換成字符串(ASCII):

var.value.encode('ascii','ignore')