xlrd无法从excel中正确读取日期单元格

时间:2019-06-14 03:05:47

标签: python django excel xlrd

我正在使用 xlrd 读取exel文件,并且有一些带有日期值的单元格:

enter image description here

问题是 xlrd 会将这些值读取为数字。我试图将单元格的类型更改为字符串,但是excel也将其转换为数字。

这是我读取文件的相关代码:

def import_partners(self):
        sheet = xlrd.open_workbook(os.getcwd()+settings.MEDIA_URL+'socios.xls', encoding_override="cp1252").sheet_by_index(0)
        rows = sheet.nrows
        for row in range(1, sheet.nrows):
            print("Importing partners: {}%\r".format(int((row/rows)*100)), end="")
            record = self.get_record('partner', sheet, row)
            self.save_record('partner', record)

def get_record(self, type, sheet, row):
    record_getters = {
        'partner': self.get_partner_record,
        'operator': self.get_operator_record
    }

    record = record_getters[type](sheet, row)

    return record

def get_partner_record(self, sheet, row):
    record = {
        'clase': self.get_socio_clase(sheet, row),
        'economico': self.get_socio_economico(sheet, row),
        'nombre': self.get_socio_nombre(sheet, row),
        'apellido': self.get_socio_apellido(sheet, row),
        'fecha_nacimiento': self.get_socio_fecha_nacimiento(sheet, row),
        'lugar_nacimiento': self.get_socio_lugar_nacimiento(sheet, row),
        'apodo': self.get_socio_apodo(sheet, row),
        'municipio': self.get_socio_municipio(sheet, row),
        'telefono': self.get_socio_telefono(sheet, row),
        'rfc': self.get_socio_rfc(sheet, row),
        'sexo': self.get_socio_sexo(sheet, row),
        'fecha_ingreso': self.get_socio_fecha_ingreso(sheet, row),
        'tipo_sangre': self.get_socio_tipo_sangre(sheet, row),
        'edo_civil': self.get_socio_edo_civil(sheet, row),
        'quien_cede': self.get_socio_cede(sheet, row),
        'licencia': self.get_socio_licencia(sheet, row),
        'vence_licencia': self.get_socio_vence_licencia(sheet, row),
        'tipo_licencia': self.get_socio_tipo_licencia(sheet, row),
        'expedida': self.get_socio_expedida(sheet, row),
        'activo': self.get_socio_activo(sheet, row),
    }

    return record

def get_socio_fecha_nacimiento(self, sheet, row):
    fecha = sheet.cell(row, SOCIO_COL_FECHA_NACIMIENTO).value

    if fecha != '':
        return self.get_date(fecha)
    else:
        return None

def get_date(self, fecha):
    try:
        date_array = fecha.split('/')
    except:
        return None
    if len(date_array) != 3:
        return None

    date = datetime.date(date_array[2], date_array[1], date_array[0])
    return date

此代码不起作用,因为我期望一个格式为“%d /%m /%y”的字符串,但是我得到的是浮点数。

编辑

我在How to read dates using xlrd?中尝试了该解决方案:

def get_date(self, book, fecha):
    date = datetime.datetime(*xlrd.xldate_as_tuple(fecha, book.datemode))
    return date

但是我有这个例外:

File "/Users/hugovillalobos/Documents/Code/TaxistasProject/TaxistasVenv/lib/python3.7/site-packages/xlrd/xldate.py", line
 95, in xldate_as_tuple
    if xldate < 0.00:
TypeError: '<' not supported between instances of 'str' and 'float'

0 个答案:

没有答案