当从一张纸复制数据,然后粘贴到另一张Excel表时,Openpyxl边框线会断开

我正在尝试使用Openpyxl的是,我从Excel表中复制一些单元格的值,然后打开另一个Excel表格并粘贴这些值。 意外的是我得到了边界线破裂的表格,特别是合并的单元格。

我想听听你的意见。 另外,有没有更好的方式来循环通过单元格? 目前只有三个单元,但如果超过100个单元呢……非常感谢。

from openpyxl import load_workbook import os from os.path import exists target_file = input('ex)201711 ') wb = load_workbook(target_file + '.xlsm', data_only=True) sheet = wb['summary'] num_people = len(sheet['A:A']) for i in range(1, num_people): val_1 = sheet.cell(row=i + 1, column=1).value val_2 = sheet.cell(row=i + 1, column=2).value val_3 = sheet.cell(row=i + 1, column=3).value file_name = '2017(' + val_1 + ').xlsx' if not exists(file_name): continue else: wb = load_workbook(file_name, data_only=True) sheet2 = wb['summary2'] sheet2.cell(row=1, column=1).value = val_1 sheet2.cell(row=1, column=2).value = val_2 sheet2.cell(row=1, column=3).value = val_3 wb.save(file_name) 

我可能会误解这个问题,但是嵌套for循环看起来很理想。

 from openpyxl import load_workbook import os from os.path import exists target_file = input('ex)201711 ') wb = load_workbook(target_file + '.xlsm', data_only=True) sheet = wb['summary'] num_people = len(sheet['A:A']) num_vals = 3 for i in range(1, num_people): for j in range(1,numvals+1): val[j] = sheet.cell(row=i + 1, column=j).value file_name = '2017(' + val[1] + ').xlsx' if not exists(file_name): continue else: wb = load_workbook(file_name, data_only=True) sheet2 = wb['summary2'] for j in range(1,numvals+1): sheet2.cell(row=1, column=j).value = val[j] wb.save(file_name) 

此外,openpyxl现在支持数组索引样式的单元格引用,这可以使事情更容易读/写:

 #these are equivalent sheet2.cell(row=1, column=j).value = val[j] sheet2.[openpyxl.utils.get_column_letter(j) + '1'] = val[j] 

关于格式化边框,在openpyxl中(不幸的是)有必要明确指定合并单元格上的所有边界,这与默认的excel操作不同,在该操作中,将合并单元应用于单元格的样式。