需求说明: 根据excel中已有的数据,填充空白的单元格
问题举例: 在一个excel中,同一个人的编号只保存了一次,多条记录的情况下存在编号空缺情况
需求: 需要对同一个人的多条记录的空缺编号进行填补
目标:要达到的填补效果如下图(本需求为向上填充):
import xlrd
from xlutils.copy import copy
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("保存成功!")
# 调用函数,进行测试
excel_path = r"D:\MyFileFolder\Desktop\e.xls" # Excel文件路径
paddingData(excel_path, 1)
paddingData(excel_path, 2)
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