由于xlrd不赞成解析xlsx文件,我被迫将excel文件解析器从xlrd迁移到openpyxl
到目前为止,我还不清楚如何使用openpyxl确定日期系统格式,以及确定给定单元格值的数据类型
我想知道在openpyxl和xlrd中获得这些值的等效方法
例如,我可以看到:
在xlrd中获取工作簿的日期系统是通过book.datemode
在xlrd中获取单元格值的数据类型是通过 cell.ctype==xlrd.XL\u cell\u EMPTY/XL\u cell\u TEXT/XL\u cell\u NUMBER依此类推
目前,我一直在查看openpyxl文档here,但对于如何完成我想做的事情,运气不太好
以下是我目前的代码:
from openpyxl import load_workbook
from ext.falcon.errors import HTTPError
book = load_workbook(self._file.read())
sheet = book.active
for row in range(sheet.rows):
rows.append(pythonize_xl_row(sheet.row(row), book.datemode)) # date system issue
def pythonize_xl_row(row, datemode):
result = []
for i, cell in enumerate(row):
if cell.ctype in [xlrd.XL_CELL_EMPTY, xlrd.XL_CELL_BLANK]: # cell value issue
value = ""
elif cell.ctype == xlrd.XL_CELL_TEXT: # cell value issue
value = cell.value.strip()
elif cell.ctype == xlrd.XL_CELL_NUMBER: # cell value issue
value = str(cell.value)
if value.endswith(".0"):
value = str(int(cell.value))
elif cell.ctype == xlrd.XL_CELL_DATE: # cell value issue
value = xlrd.xldate.xldate_as_datetime(cell.value, datemode).strftime(
"%Y-%m-%d %H:%M:%S"
)
elif cell.ctype == xlrd.XL_CELL_BOOLEAN: # cell value issue
value = str(cell.value == 1)
else:
raise HTTPError(
400, "Invalid cell type at row {}: {}".format(i, cell.ctype)
)
result.append(value)
return result
谢谢大家!
目前没有回答
相关问题 更多 >
编程相关推荐