首页 > 其他 > 详细

[django]l利用xlrd实现xls文件导入数据

时间:2016-03-28 18:14:17      阅读:185      评论:0      收藏:0      [点我收藏+]

代码:

#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 keywork.models import DevData
import xlrd #excel读工具

data= xlrd.open_workbook(cs.xls) #打开文件
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) #获取每行值
    if row: #查看行值是否为空
        if DevData.objects.filter(serv_id = row[0],user_flag=row[15]).exists():#判断该行值是否在数据库中重复
            x = x + 1 #重复值计数
        else:
            y = y + 1 #非重复计数
            WorkList.append(DevData(serv_id=int(row[0]), serv_state_name=row[1], acc_nbr=row[2], user_name=row[3], acct_code=int(row[4]), product_id=int(row[5]),
                                            mkt_chnl_name=row[6], mkt_chnl_id=int(row[7]),mkt_region_name=row[8], mkt_region_id=int(row[9]),mkt_grid_name=row[10],
                                            sale_man=row[11],sale_outlets_cd1_name=row[12], completed_time=row[13],remove_data=row[14], user_flag=int(row[15]),
                                            pro_flag=row[16], service_offer_id=row[17],service_offer_name=row[18], finish_time=row[19],staff_name=row[20],
                                            staff_code=row[21],org_name=row[22],prod_offer_name=row[23],day_id=int(row[24]),
                                            )
                                    )
    else:
        z = z + 1     #空行值计数
DevData.objects.bulk_create(WorkList)
print 数据导入成功,导入+str(x)+条,重复+str(y)+条,有+str(z)+行为空!

中间就遇见一个问题很让我纠结,就是xlrd 在读取数据时,会将 xls 单元格中所有可能是数字的数据都自动转换成 python 的 float。这时候,我们通过 str(cell.value) 会得到 12.0 (假设 cell.value = 12.0)。

解决办法:比如我的a=1,那么xlrd默认输出1.0,只需要int(a)就可以了!

[django]l利用xlrd实现xls文件导入数据

原文:http://www.cnblogs.com/CQ-LQJ/p/5329906.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!