Python向Excel单元格中写入数据(修改单元格内容)和数据填充 xlrd库

用Python向excel填补数据

需求说明: 根据excel中已有的数据,填充空白的单元格

问题举例: 在一个excel中,同一个人的编号只保存了一次,多条记录的情况下存在编号空缺情况

需求: 需要对同一个人的多条记录的空缺编号进行填补
Python向Excel单元格中写入数据(修改单元格内容)和数据填充 xlrd库_第1张图片
目标:要达到的填补效果如下图(本需求为向上填充):
Python向Excel单元格中写入数据(修改单元格内容)和数据填充 xlrd库_第2张图片

1. 引入相关的库

import xlrd
from xlutils.copy import copy

2. 定义函数

def paddingData(excel_path, n):
    ''' 向excel中填充数据
        args:
            excel_path - excel的路径
            n - 第 n 次调用本函数的标记
        return:

    '''
    print("excel:", excel_path)
    print("正在打开excel文件...")
    excel_file = xlrd.open_workbook(excel_path)  # 打开Excel文件

    table = excel_file.sheets()[0]         # 通过索引打开第一个Sheet
    print('行数:%d' % table.nrows)  # 打印行数
    print('列数:%d' % table.ncols)  # 打印列数

    print("转换为可操作对象...")
    workbook = copy(excel_file)  # 将xlrd对象拷贝转化为xlwt可操作的对象

    print("获取已存在的Sheet...")
    worksheet = workbook.get_sheet(0)  # 获取一个已存在的sheet

    print("开始向数组中填补数据...")
    all_content = []
    for i in range(table.nrows - 1, 0, -1):
        row_content = []
        # 获取单元格内容
        if (table.cell(i, 0).value != ""):
            cell_value = table.cell(i, 0).value
        else:
            cell_value = table.cell(i + 1, 0).value

        row_content.append(cell_value)
        all_content.append(row_content)

    print("经过第",  n, "轮填补后的数组为:")
    print(type(all_content))
    print(all_content)

    print("开始将数组写入excel表中...")
    for x in range(table.nrows - 1, 0, -1):
        worksheet.write(table.nrows - x, 0, all_content[x - 1][0])
    print("写入excel已完成!")

    print("正在保存excel...")
    workbook.save(excel_path)
    print("保存成功!")

3. 调用函数,进行测试

# 调用函数,进行测试
excel_path = r"D:\MyFileFolder\Desktop\e.xls"    # Excel文件路径
paddingData(excel_path, 1)
paddingData(excel_path, 2)

4. 运行效果,最终效果

excel: D:\MyFileFolder\Desktop\e.xls
正在打开excel文件...
行数:8
列数:3
转换为可操作对象...
获取已存在的Sheet...
开始向数组中填补数据...
经过第 1 轮填补后的数组为:

[[332.0, '白居易', 'A33'], [331.0, '白居易', 'A33'], [223.0, '杜甫', 'A22'], [222.0, '杜甫', 'A22'], [221.0, '杜甫', ''], [112.0, '李白', 'A11'], [111.0, '李白', 'A11']]
开始将数组写入excel表中...
写入excel已完成!
正在保存excel...
保存成功!
excel: D:\MyFileFolder\Desktop\e.xls
正在打开excel文件...
行数:8
列数:3
转换为可操作对象...
获取已存在的Sheet...
开始向数组中填补数据...
经过第 2 轮填补后的数组为:

[[332.0, '白居易', 'A33'], [331.0, '白居易', 'A33'], [223.0, '杜甫', 'A22'], [222.0, '杜甫', 'A22'], [221.0, '杜甫', 'A22'], [112.0, '李白', 'A11'], [111.0, '李白', 'A11']]
开始将数组写入excel表中...
写入excel已完成!
正在保存excel...
保存成功!

Process finished with exit code 0

Python向Excel单元格中写入数据(修改单元格内容)和数据填充 xlrd库_第3张图片
与需求效果完全符合!

你可能感兴趣的:(python,excel)