Python解析Excel文件/xlrd和openpyxl之间的差异(日期系统和单元格值类型)

2024-03-29 02:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

由于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

谢谢大家!


Tags: invaluecellissueresultctypesheetrow