如何用Python+Openpyxl从指定单元格批量写入列表到已有Excel?
将列表数据批量写入Excel指定区域
实现方案(基于openpyxl)
首先确保安装openpyxl库:
pip install openpyxl
以下是完整的可运行代码,适配你的需求:
from openpyxl import load_workbook # 示例employee_data字典,替换成你实际的数据结构 employee_data = { "emp_001": ['A', 'B', 'C', 'D', 'E'], "emp_002": ['B', 'C', 'B', 'B', 'B'], "emp_003": ['C', 'C', 'C', 'C', 'C'], "emp_004": ['A', 'B', 'C', 'D', 'E'], "emp_005": ['D', 'D', 'D', 'D', 'D'] } # 加载目标Excel文件 wb = load_workbook("target_file.xlsx") # 选择要操作的工作表,这里用活动表,也可以指定表名如wb["Sheet1"] ws = wb.active # 起始行设置为3(对应Excel的第3行,即C3所在行) start_row = 3 # 遍历字典中的每个列表,逐行写入 for row_offset, data_list in enumerate(employee_data.values()): current_row = start_row + row_offset # 从C列(第3列)开始,逐个写入列表元素 for col_offset, value in enumerate(data_list): # openpyxl中列从1开始计数,C列对应3,所以列号是3 + col_offset ws.cell(row=current_row, column=3 + col_offset, value=value) # 保存修改后的文件 wb.save("updated_target_file.xlsx")
关键说明
- 遍历
employee_data.values()直接获取所有需要写入的列表,Python3.7+版本字典会保持插入顺序,按顺序逐行写入。 current_row = start_row + row_offset确保第一个列表写入第3行,第二个写入第4行,以此类推。- 列号通过
3 + col_offset计算:C列是第3列,列表第一个元素写入C列,第二个写入D列,若列表有6个元素会自动写到H列,匹配你提到的C3到H列区域。
高效批量写入优化
如果数据量较大,可改用批量赋值提升效率:
from openpyxl import load_workbook employee_data = { "emp_001": ['A', 'B', 'C', 'D', 'E'], "emp_002": ['B', 'C', 'B', 'B', 'B'], "emp_003": ['C', 'C', 'C', 'C', 'C'], "emp_004": ['A', 'B', 'C', 'D', 'E'], "emp_005": ['D', 'D', 'D', 'D', 'D'] } wb = load_workbook("target_file.xlsx") ws = wb.active start_row = 3 # 将所有列表转为二维数组 data_matrix = list(employee_data.values()) # 逐行批量写入 for row_idx, row_data in enumerate(data_matrix, start=start_row): # 定位到当前行的C列开始位置,批量赋值 ws[f"C{row_idx}"] = row_data wb.save("updated_target_file.xlsx")
注意事项
- 操作Excel文件前请确保文件处于关闭状态,避免权限报错。
- 若目标单元格已有数据,新内容会直接覆盖,建议提前备份文件。
- 若需要严格控制字典遍历顺序,Python3.7以下版本需使用
collections.OrderedDict存储数据。
内容的提问来源于stack exchange,提问作者Sagar Patil
相关产品推荐
相关产品推荐

