[django]django xlrd处理xls中日期转换问题

xlrd会把xls文件中比如20160--03-01类型的时间转换成整数,那么我们如何保证xlrd读取进来的时间为2016-03-01格式呢?

使用xlrd中的xldate_as_tuple函数

代码如下:

from datetime import datetime

from xlrd import xldate_as_tuple


datetime(*xldate_as_tuple(table.cell(2,2).value,0))
str(datetime(*xldate_as_tuple(table.cell(2,2).value,0)))[0:10]#取字符串的前十,例如结果为2016-06-01 00:00:00 则为2016-06-01

完整导入数据代码:

#coding:utf-8 

import os 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") 

'''
Django 版本大于等于1.7的时候,需要加上下面两句
import django
django.setup()
否则会抛出错误 django.core.exceptions.AppRegistryNotReady: Models aren't loaded yet.
'''
import django

if django.VERSION >= (1, 7):#自动判断版本
    django.setup()

from contract.models import Bill
import xlrd #excel读工具
from datetime import datetime
from xlrd import xldate_as_tuple

data= xlrd.open_workbook('DEMO.xlsx') #打开文件
table = data.sheet_by_index(0) #获取工作表
nrows = table.nrows #行数
ncols = table.ncols #列数
colnames =  table.row_values(0)
WorkList = []
x = y = z = 0
for i in range(1,nrows):
    row = table.row_values(i) #获取每行值
    for j in range(0,ncols):
        if type(row[j]) == float: #如果值为float则转换为int,避免出现1输出为1.0的情况
            row[j] = int(row[j])
    if row: #查看行值是否为空
        if Bill.objects.filter(contract_code = row[0]).exists():#判断该行值是否在数据库中重复
            x = x + 1 #重复值计数
        else:
            y = y + 1 #非重复计数
            row[3] = str(datetime(*xldate_as_tuple(row[3],0)))[0:10]#xlrd读取xls文件时间整数值转换为date形式
            row[4] = str(datetime(*xldate_as_tuple(row[4],0)))[0:10]
            row[5] = str(datetime(*xldate_as_tuple(row[5],0)))[0:10]
            WorkList.append(Bill(contract_code=row[0], contract_name=row[1], cust_name=row[2], con_sign_date=row[3],
                                             con_eff_date=row[4], con_exp_date=row[5],con_state=row[6], con_age=row[7],
                                             con_type=row[8], con_agent=row[9],new_flag=row[10],original_code=row[11],payment=row[12]
                                )
                            )
    else:
        z = z + 1     #空行值计数
Bill.objects.bulk_create(WorkList)
print '数据导入成功,导入'+str(x)+'条,重复'+str(y)+'条,有'+str(z)+'行为空!'

 

posted @ 2016-04-01 11:24  CQ_LQJ  阅读(1637)  评论(0编辑  收藏  举报