我在从xlrd中读取Excel中的特定单元格值时遇到困难。我正在阅读的任何值(日期值)都会转换为数字。我知道有解决方案将其转换为python日期格式,但是我可以直接读取xlrd中的字符串值吗?
答案 0 :(得分:9)
xlrd不会将日期转换为浮动。 Excel将日期存储为浮点数。
从the xlrd documentation引用(向下滚动页面):
Excel电子表格中的日期
实际上,没有这样的事情。 你有什么浮点 数字和虔诚的希望。有 Excel日期的几个问题:
(1)日期不作为单独存储 数据类型;它们存储为浮动 点数,你必须依靠 (a)适用的“数字格式” 他们在Excel中和/或(b)知道哪些 细胞应该有日期 他们。该模块有助于(a)通过 检查已经存在的格式 应用于每个数字单元;如果它 似乎是日期格式,单元格 被归类为日期而不是日期 号。
(2)...使用此包的
xldate_as_tuple()
函数进行转换时 工作簿中的数字,您必须使用的datemode
属性Book
对象。
另请参阅Cell class上的部分以了解单元格的类型,以及提取单元格类型的各种Sheet methods(文本,数字,日期,布尔值等)。 / p>
查看python-excel.org了解其他Python Excel软件包的信息。
答案 1 :(得分:7)
# 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
答案 2 :(得分:4)
Excel将日期作为内部和.xls文件中的数字存储,然后在显示时相应地格式化它们。因此,如果您使用 xlrd 天真地阅读它们,您将获得数字或字符串。你应该做的是检查一个单元格的类型,然后自己转换数字。使用 xlrd 的内置函数,例如xldate_as_tuple()
或您自己的函数。
有关详细信息,请参阅this question。