为了账号安全,请及时绑定邮箱和手机立即绑定

利用xlrd模块在Django项目中实现Excel文件导入

标签:
Python

在项目接近尾声的时候,经常会需要将客户的一些数据资料导入到项目中进行测试或者实际使用,大量的数据当然不可能通过手动的方式输入,这个时候就需要将数据通过Excel文件导入到项目中。具体实现方式如下:

1.引入xlrd模块
import xlrd
2.从前端获取Excel文件数据对象
excel_file = request.FILES.get('excel_file','')
3.读取Excel文件数据对象

常用的Excel文件有  .xlsx  和  .xls两种,.xls文件读取时需要设置formatting_info=True

data = xlrd.open_workbook(filename=None, file_contents=excel_file.read())  # xlsx文件data = xlrd.open_workbook(filename=None, file_contents=excel_file.read(), formatting_info=True)   # xls文件
4.获取Excel中每张表(sheets)的数据内容

get_sheets_mg()  # 获取表中每一行的数据

def get_sheets_mg(data, num):      # data:Excel数据对象,num要读取的表
    table = data.sheets()[num]  # 打开第一张表
    nrows = table.nrows  # 获取表的行数
    ncole = table.ncols  # 获取列数
    all_list = []    for i in range(nrows):  # 循环逐行打印
        one_list = []        for j in range(ncole):
            cell_value = table.row_values(i)[j]            if (cell_value is None or cell_value == ''):
                cell_value = (get_merged_cells_value(table, i, j))
            one_list.append(cell_value)
        all_list.append(one_list)    del (all_list[0])  # 删除标题   如果Excel文件中第一行是标题可删除掉,如果没有就不需要这行代码
    return all_list

仅仅获取Excel表中的每一行数据是满足不了实际需求的,因为Excel中经常会有合并单元格的情况出现,因此还要处理合并单元格情况的函数。
get_merged_cells()  # 获取所有合并的单元格信息   sheet.merged_cells

def get_merged_cells(sheet):
    """
    获取所有的合并单元格,格式如下:
    [(4, 5, 2, 4), (5, 6, 2, 4), (1, 4, 3, 4)]
    (4, 5, 2, 4) 的含义为:行 从下标4开始,到下标5(不包含)  列 从下标2开始,到下标4(不包含),为合并单元格
    :param sheet:
    :return:
    """
    return sheet.merged_cells

get_merged_cells_value() # 获取被合并单元格中的信息

def get_merged_cells_value(sheet, row_index, col_index):
    """
    先判断给定的单元格,是否属于合并单元格;
    如果是合并单元格,就返回合并单元格的内容
    :return:
    """
    merged = get_merged_cells(sheet)    # print(merged,"==hebing==")
    for (rlow, rhigh, clow, chigh) in merged:        if (row_index >= rlow and row_index < rhigh):            if (col_index >= clow and col_index < chigh):
                cell_value = sheet.cell_value(rlow, clow)                # print('该单元格[%d,%d]属于合并单元格,值为[%s]' % (row_index, col_index, cell_value))
                return cell_value                break
    return None
5.将获取的数据循环导入数据库中
all_list_1 = get_sheets_mg(data, 0)
i = 0while i < len(all_list_1):
      ....  # 保存省略
     i++



作者:零_WYF
链接:https://www.jianshu.com/p/42ebbc8330f0


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消