Python 如何循环遍历每个源文件,并将特定列复制到一个新工作簿中,每个新的;粘贴";切换到相邻的列?
我有3个Excel文件,每个工作簿(每个工作簿的第1页)中的单元格A1到A10(源单元格)中有一列数据。我想将数据从源单元格复制到新工作簿中,但每次都必须将数据移到新列中。Python 如何循环遍历每个源文件,并将特定列复制到一个新工作簿中,每个新的;粘贴";切换到相邻的列?,python,openpyxl,copy-paste,Python,Openpyxl,Copy Paste,我有3个Excel文件,每个工作簿(每个工作簿的第1页)中的单元格A1到A10(源单元格)中有一列数据。我想将数据从源单元格复制到新工作簿中,但每次都必须将数据移到新列中。 例如: 文件1中的源单元格必须复制到新工作簿中的A1至A10单元格 文件2中的源单元格必须复制到新工作簿中的B1至B10单元格;及 必须将文件3中的源单元格复制到新工作簿中的单元格C1到C10 我正在努力找出在每次迭代中调整代码中“j”的最佳方法。我也不确定最干净的方法是为不同的源文件运行每个函数 所有关于如何使这段代码更干
例如:
import openpyxl as xl
filename_1 = "C:\\workspace\\scripts\\file1.xlsx"
filename_2 = "C:\\workspace\\scripts\\file2.xlsx"
filename_3 = "C:\\workspace\\scripts\\file3.xlsx"
destination_filename = "C:\\workspace\\scripts\\new_file.xlsx"
num_rows = 10
num_columns = 1
def open_source_workbook(path):
'''Open the workbook and worksheet in the source Excel file'''
workbook = xl.load_workbook(path)
worksheet = workbook.worksheets[0]
return worksheet
def open_destination_workbook(path):
'''Open the destination workbook I want to copy the data to.'''
new_workbook = xl.load_workbook(path)
return new_workbook
def open_destination_worksheet(path):
'''Open the worksheet of the destination workbook I want to copy the data to.'''
new_worksheet = new_workbook.active
return new_worksheet
def copy_to_new_file(worksheet, new_worksheet):
for i in range (1, num_rows + 1):
for j in range (1, num_columns + 1):
c = worksheet.cell(row = i, column = j)
new_worksheet.cell(row = i, column = j).value = c.value
worksheet = open_source_workbook(filename_1)
new_workbook = open_destination_workbook(destination_filename)
new_worksheet = open_destination_worksheet(new_workbook)
copy_to_new_file(worksheet, new_worksheet)
new_workbook.save(str(destination_filename))
问题:循环文件,复制特定列,并将每个新“粘贴”移动到相邻列
此方法首先从所有文件聚合列单元格值。然后重新设置它的范围,以便它可以被
openpyxl.append(…
方法使用。因此,不需要目标列知识
参考:
- 有序字典与常规字典一样,但具有一些与排序操作相关的额外功能
- 将Excel样式坐标转换为(行、列)元组
- 按行从工作表生成单元格。使用行和列的索引指定迭代范围
- 返回一个迭代器,该迭代器将函数应用于iterable的每个项,并生成结果
- 制作一个迭代器,聚合来自每个ITerable的元素
import openpyxl as opxl
from collections import OrderedDict
顺序定义文件dict
以保留文件列顺序
file = OrderedDict.fromkeys(('file1', 'file2', 'file3'))
min_col, max_col, min_row, max_row =
opxl.utils.cell.range_to_tuple('DUMMY!A1:A10')[1]
加载每个工作簿并获取对默认工作表的引用
从定义的范围中获取单元格值:
最小列=1,最大列=1,最小行=1,最大行=10
for fname in file.keys():
wb = openpyxl.load_workbook(fname)
ws = wb.current()
file[fname] = ws.iter_rows(min_row=min_row,
max_row=max_row,
min_col=min_col,
max_col=max_col,
values_only=True)
wb2 = opxl.Workbook()
ws2 = wb2.current()
for row_value in map(lambda r:tuple(v for c in r for v in c),
zip(*(file[k] for k in file))
):
ws2.append(row_value)
使用
lambda
将压缩的元组列表映射为行值列表。将值列表附加到新工作表
wb2 = opxl.Workbook()
ws2 = wb2.current()
for row_value in map(lambda r:tuple(v for c in r for v in c),
zip(*(file[k] for k in file))
):
ws2.append(row_value)
# wb2.save(...)
然后重新设置它的范围,以便它可以被
openpyxl.append(…
方法使用。因此,不需要目标列知识
参考:
- 有序字典与常规字典一样,但具有一些与排序操作相关的额外功能
- 将Excel样式坐标转换为(行、列)元组
- 按行从工作表生成单元格。使用行和列的索引指定迭代范围
- 返回一个迭代器,该迭代器将函数应用于iterable的每个项,并生成结果
- 制作一个迭代器,聚合来自每个ITerable的元素
import openpyxl as opxl
from collections import OrderedDict
顺序定义文件dict
以保留文件列顺序
file = OrderedDict.fromkeys(('file1', 'file2', 'file3'))
min_col, max_col, min_row, max_row =
opxl.utils.cell.range_to_tuple('DUMMY!A1:A10')[1]
加载每个工作簿并获取对默认工作表的引用
从定义的范围中获取单元格值:
最小列=1,最大列=1,最小行=1,最大行=10
for fname in file.keys():
wb = openpyxl.load_workbook(fname)
ws = wb.current()
file[fname] = ws.iter_rows(min_row=min_row,
max_row=max_row,
min_col=min_col,
max_col=max_col,
values_only=True)
wb2 = opxl.Workbook()
ws2 = wb2.current()
for row_value in map(lambda r:tuple(v for c in r for v in c),
zip(*(file[k] for k in file))
):
ws2.append(row_value)
使用
lambda
将压缩的元组列表映射为行值列表。将值列表附加到新工作表
wb2 = opxl.Workbook()
ws2 = wb2.current()
for row_value in map(lambda r:tuple(v for c in r for v in c),
zip(*(file[k] for k in file))
):
ws2.append(row_value)
# wb2.save(...)
感谢您的详细回复和解释。我将详细地完成此操作!感谢您的详细回复和解释。我将详细地完成此操作!