我如何循环浏览每个源文件,并将特定的列复制到新的工作簿中,并且每个新的“粘贴”都移到相邻的列上?

问题描述 投票:0回答:1

我有3个Excel文件,每个工作簿(每个工作簿的工作表1)中的单元格A1至A10(“ 源单元格”)中都有一列数据。我想将数据从“源单元格”复制到新工作簿中,但是每次数据都必须移到新列中。例如:

  1. 文件1中的源单元格必须复制到新工作簿中的单元格A1到A10;
  2. 文件2中的源单元格必须复制到新工作簿中的单元格B1至B10;和
  3. 必须将文件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))
python openpyxl copy-paste
1个回答
0
投票

问题:循环文件,复制特定的列,每个新的“粘贴”都移到相邻的列?

此方法首先从all文件汇总列单元格值。然后重新排列它,以便可以由openpyxl.append(...方法使用。因此,需要no目标列知识。


参考


  1. 二手进口

    iter_rows(min_row=None, max_row=None, min_col=None, max_col=None, values_only=False)
  2. map(function, iterable, ...)定义文件以保留文件<=>列顺序

    map(function, iterable, ...)
  3. 将范围定义为索引值。将Excel A1表示法转换为索引值

    zip(*iterables)
  4. 循环定义的文件,加载每个工作簿并获得对默认工作表的引用从定义的范围获取单元格值:zip(*iterables)

    import openpyxl as opxl
    from collections import OrderedDict
    
  5. 定义一个新的工作簿并获得对默认工作表的引用

    OrderedDict
  6. 压缩值,所有文件中的每一行使用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]
    
  7. 保存新工作簿

    min_col=1, max_col=1, min_row=1, max_row=10
© www.soinside.com 2019 - 2024. All rights reserved.