2011-04-18 3 views
9

xlrd에서 Excel의 특정 셀 값을 읽는 데 어려움이 있습니다. 내가 읽고있는 값 (날짜 값)은 숫자로 변환됩니다. 파이썬 날짜 형식으로 변환 할 수있는 솔루션을 알고 있지만 xlrd 문자열 값을 직접 읽을 수 있습니까? 잘Python xlrd가 문자열로 읽습니다.

+2

Excel의 작동 방식입니다. 슬프게도 많은 값이 Excel에서 숫자로 저장됩니다. XLRD에서 읽고있는 셀 값의 세부 정보를 입력하십시오. 특히 셀 유형을 인쇄하고 질문에 포함하십시오. –

답변

8

xlrd는 날짜를 실수로 변환하지 않습니다. Excel은 날짜를 수레로 저장합니다.

(페이지를 아래로 스크롤) the xlrd documentation에서 인용 : Excel 스프레드 시트 현실에서

에서

날짜, 그런 일이 없습니다. 당신은 부동 소수점 숫자와 경건한 희망입니다. Excel 날짜의 경우 몇 가지 문제가 있습니다.

(1) 날짜는 별도의 데이터 형식으로 저장되지 않습니다. 그들은 부동 소수점 포인트 번호로 저장되며 Excel에서 (a) 숫자 형식을 에 적용하고 /하거나 (b) 세포가 에 날짜를 포함하고 있음을 알고 있어야합니다. 이 모듈은 (a) 에 의해 각 숫자 셀에 적용된 형식을 검사하는 데 도움이됩니다. 이 날짜 형식으로 나타나는 경우 셀은 수가 아닌 날짜로 분류됩니다.

셀 클래스 및 셀 유형 (텍스트, 숫자, 날짜, 부울 등)을 추출하는 다양한 시트 메서드 섹션을 참조하십시오.

또한 www.python-excel.org에서 액세스 할 수있는 자습서를 참조하십시오.

+0

Excel이 셀을 날짜로 해석해야 할 때 Excel이 어떻게 작동하는지 궁금합니다. xlrd가 추측해야하는 것으로 보입니다. – nobar

+0

@nobar : Excel은 xlrd가 사용할 수있는 정보와 정확히 동일합니다. 두 숫자 모두 숫자 형식의 인트로 스를 사용합니다. –

+4

실제로 Excel 파일에는 각 셀 값 외에 셀 유형이 저장됩니다. 각 유형은 정수로 저장되며 sheet.cell_type (rowNumber, columnNumber)을 사용하여 xlrd에 액세스 할 수 있습니다. 공백, 1은 텍스트, 2는 숫자, 3은 날짜입니다. – Brian

5

, 당신이 말한대로 :

시트 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 목록 다음 XLS는이 예

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

색상을

status color 
active red 
dormant yellow 
extinct green 
+0

내가 sh1.row_values ​​(rownum) 할 때 나는 값이 이미 부동 소수점으로 변환 된 목록을 얻고있다. – Rnet

4

Excel은 날짜를 모두 int로 저장합니다. ernally 및 .xls 파일로 변환 한 다음 표시 할 때 그에 따라 형식을 지정합니다. 따라서, 순진한 경우 xlrd으로 읽으면 숫자 나 문자열을 얻게됩니다. 당신이해야 할 일은 셀의 타입이 무엇인지 확인한 다음 그 숫자를 직접 변환하는 것입니다. xldate_as_tuple()과 같은 xlrd의 내장 함수 또는 사용자 고유의 기능을 사용하십시오.

자세한 내용은 this question을 참조하십시오.

관련 문제