我有3个Excel文件,每个工作簿(每个工作簿的工作表1)中的单元格A1至A10(“ 源单元格”)中都有一列数据。我想将数据从“源单元格”复制到新工作簿中,但是每次数据都必须移到新列中。例如:
我正在努力寻找在每次迭代中调整代码“ 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))
问题:循环文件,复制特定的列,每个新的“粘贴”都移到相邻的列?
此方法首先从all文件汇总列单元格值。然后重新排列它,以便可以由openpyxl.append(...
方法使用。因此,需要no目标列知识。
参考:
class collections.OrderedDict([items])
订购字典与常规字典一样,但是具有一些与订购操作有关的额外功能。
class collections.OrderedDict([items])
将Excel样式的坐标转换为(行,列)元组
openpyxl.utils.cell.coordinate_to_tuple(coordinate)
按行从工作表中生成单元格。使用行和列的索引指定迭代范围。
openpyxl.utils.cell.coordinate_to_tuple(coordinate)
返回一个将函数应用于所有可迭代项的迭代器,产生结果。
iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
创建一个迭代器,该迭代器聚合每个可迭代对象中的元素。
二手进口
iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
以map(function, iterable, ...)
定义文件以保留文件<=>列顺序
map(function, iterable, ...)
将范围定义为索引值。将Excel A1表示法转换为索引值
zip(*iterables)
循环定义的文件,加载每个工作簿并获得对默认工作表的引用从定义的范围获取单元格值:zip(*iterables)
import openpyxl as opxl
from collections import OrderedDict
定义一个新的工作簿并获得对默认工作表的引用
OrderedDict
压缩值,所有文件中的每一行使用file = OrderedDict.fromkeys(('file1', 'file2', 'file3'))
映射到元组的压缩列表,以展平到Row值的列表。将值列表追加到新的工作表中
min_col, max_col, min_row, max_row =
opxl.utils.cell.range_to_tuple('DUMMY!A1:A10')[1]
保存新工作簿
min_col=1, max_col=1, min_row=1, max_row=10