openpyxl技术咨询:未知行列维度取单元格值及指定区域粘贴
嘿,刚接触Python和openpyxl的话,这两个问题其实挺典型的,我来一步步给你捋明白~
问题1:获取未知行列维度的工作表所有单元格值
完全可以!openpyxl提供了非常方便的方式来获取整张表的所有值,不用提前知道行列数。最简洁的方法是用工作表的values属性,它会返回一个生成器,按行遍历所有单元格的值,每行的值会组成一个元组。你可以把它转成列表,方便后续操作。
举个例子:
from openpyxl import load_workbook # 打开源工作簿 source_wb = load_workbook("你的源文件.xlsx") # 可以指定具体工作表,比如source_wb["Sheet1"],这里用active取当前活跃表 source_ws = source_wb.active # 获取所有单元格的值,转成二维列表(每行是一个子列表) all_data = [list(row) for row in source_ws.values]
这样不管你的源表有多少行多少列,all_data都会完整保存所有单元格的值。
问题2:将数据粘贴到指定工作簿的第4行第4列
openpyxl里的行和列都是从1开始计数的,第4行第4列对应的就是单元格D4。我们只需要遍历刚才拿到的all_data,计算每个值对应的目标单元格位置,然后写入即可。
代码示例如下:
from openpyxl import load_workbook, Workbook # 处理目标工作簿:如果存在就打开,不存在就新建 try: target_wb = load_workbook("你的目标文件.xlsx") except FileNotFoundError: target_wb = Workbook() # 同样可以指定具体工作表,比如target_wb["目标工作表"] target_ws = target_wb.active # 起始位置:第4行第4列 start_row = 4 start_col = 4 # 遍历数据,逐个写入目标单元格 for row_index, row_data in enumerate(all_data): for col_index, cell_value in enumerate(row_data): # 计算目标单元格的行号和列号 target_row = start_row + row_index target_col = start_col + col_index # 写入值 target_ws.cell(row=target_row, column=target_col, value=cell_value) # 一定要保存!否则修改不会生效 target_wb.save("你的目标文件.xlsx")
这里用enumerate来获取数据的行/列索引(从0开始),加上起始的4,就能精准定位到从D4开始的区域。如果目标文件一开始不存在,代码会自动新建一个,避免报错。
小提醒
如果你的源工作表有合并单元格,values属性只会读取合并区域左上角单元格的值,这是正常的行为哦。如果需要处理合并单元格的特殊情况,可能需要额外判断,但如果只是复制普通数据的话,上面的代码完全够用。
内容的提问来源于stack exchange,提问作者SuppaDuppa
相关产品推荐
相关产品推荐

