王大可2000 发表于 2023-4-17 18:07:10

openpyxl之合并多个数据并修改列名


现有九个Excel表格名称为ABCDEFGHI,要求将这九个表格的第一列数据提取合并至一个新Excel表中命名为J,并且在J表中将ABCDEFGHI表中的第一列的列名对应修改为ABCDEFGHI
求大佬指教{:9_221:}{:9_221:} {:9_221:}

歌者文明清理员 发表于 2023-4-17 18:07:48

本帖最后由 歌者文明清理员 于 2023-4-17 18:09 编辑

您可以使用openpyxl库实现这个功能,具体的步骤如下:
import openpyxl

# 创建新的Excel文件J.xlsx,并获取其活动工作表
new_workbook = openpyxl.Workbook()
new_sheet = new_workbook.active
new_sheet.title = 'J'

# 遍历A至I这九个文件
for filename in ['A.xlsx', 'B.xlsx', 'C.xlsx', 'D.xlsx', 'E.xlsx', 'F.xlsx', 'G.xlsx', 'H.xlsx', 'I.xlsx']:
    workbook = openpyxl.load_workbook(filename)
    sheet = workbook.active
   
    # 获取当前文件的第一列数据
    column_data = ]

    # 将当前文件名对应的列名设置为第一列的值
    sheet.column_dimensions['A'].width = 20
    sheet['A1'] = filename[:-5]   # 去掉文件名中的.xlsx后缀
    sheet['A1'].font = openpyxl.styles.Font(bold=True)

    # 将第一列数据追加到新Excel表J的第一列中
    new_sheet.append(column_data)

    # 修改新Excel表J中的第一行为文件名
    new_sheet.cell(row=1, column=len(new_sheet.columns)).value = filename[:-5]
    new_sheet.cell(row=1, column=len(new_sheet.columns)).font = openpyxl.styles.Font(bold=True)

# 保存新Excel表J
new_workbook.save('J.xlsx')
解释一下代码流程:


[*]首先,在代码开头创建了新的Excel文件并获取了其中的活动工作表。

[*]然后,遍历A至I这九个文件,对于每个文件,首先获取其第一列的数据,并将该文件名对应的列名设置为第一列的值,然后将该文件的第一列追加到新Excel表J的第一列中。

[*]最后,修改新Excel表J的第一行为文件名,并保存该文件。

isdkz 发表于 2023-4-17 18:16:51

你可以使用openpyxl库来实现这个任务。首先,确保你已经安装了openpyxl库。如果还没有安装,请运行以下命令进行安装:
pip install openpyxl


接下来,你可以使用以下代码来实现你的需求:
import openpyxl

def merge_worksheets(filenames, output_file):
    # 创建一个新的工作簿
    merged_wb = openpyxl.Workbook()
    merged_ws = merged_wb.active

    # 遍历文件名
    for index, filename in enumerate(filenames, start=1):
      # 读取当前工作簿
      wb = openpyxl.load_workbook(filename)
      ws = wb.active

      # 提取第一列数据
      for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=1):
            for cell in row:
                new_cell = merged_ws.cell(row=cell.row, column=index, value=cell.value)

      # 修改列名
      merged_ws.cell(row=1, column=index, value=chr(ord('A') + index - 1))

    # 保存新的工作簿
    merged_wb.save(output_file)

# 输入文件名列表和输出文件名
input_files = ['A.xlsx', 'B.xlsx', 'C.xlsx', 'D.xlsx', 'E.xlsx', 'F.xlsx', 'G.xlsx', 'H.xlsx', 'I.xlsx']
output_file = 'J.xlsx'

# 合并工作表
merge_worksheets(input_files, output_file)


这段代码将遍历输入的文件名列表,从每个工作簿的第一列提取数据并合并到新工作簿的新工作表中。同时,将列名修改为对应的A到I。最后,将新工作簿保存为指定的输出文件。

王大可2000 发表于 2023-4-17 21:54:57

isdkz 发表于 2023-4-17 18:16
你可以使用openpyxl库来实现这个任务。首先,确保你已经安装了openpyxl库。如果还没有安装,请运行以下命令 ...

提问:如果ABCD是文字呢?如Excel文件名为一二三四五六七八九,合并后各列的列名分别为一二三四五六七八九

isdkz 发表于 2023-4-17 21:57:36

王大可2000 发表于 2023-4-17 21:54
提问:如果ABCD是文字呢?如Excel文件名为一二三四五六七八九,合并后各列的列名分别为一二三四五六七八 ...

你可以稍微修改一下之前的代码,将列名更改为给定的文本列名。以下是相应的修改:

import openpyxl

def merge_worksheets(filenames, column_names, output_file):
    # 创建一个新的工作簿
    merged_wb = openpyxl.Workbook()
    merged_ws = merged_wb.active

    # 遍历文件名
    for index, filename in enumerate(filenames, start=1):
      # 读取当前工作簿
      wb = openpyxl.load_workbook(filename)
      ws = wb.active

      # 提取第一列数据
      for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=1):
            for cell in row:
                new_cell = merged_ws.cell(row=cell.row, column=index, value=cell.value)

      # 修改列名
      merged_ws.cell(row=1, column=index, value=column_names)

    # 保存新的工作簿
    merged_wb.save(output_file)

# 输入文件名列表和输出文件名
input_files = ['一.xlsx', '二.xlsx', '三.xlsx', '四.xlsx', '五.xlsx', '六.xlsx', '七.xlsx', '八.xlsx', '九.xlsx']
column_names = ['一', '二', '三', '四', '五', '六', '七', '八', '九']
output_file = '合并后的表格.xlsx'

# 合并工作表
merge_worksheets(input_files, column_names, output_file)


现在,将文件名列表和列名列表传递给merge_worksheets函数,将输入文件名列表中的工作簿合并为一个新的工作簿,并将列名设置为对应的column_names列表中的文本。

王大可2000 发表于 2023-4-17 22:08:46

isdkz 发表于 2023-4-17 21:57
你可以稍微修改一下之前的代码,将列名更改为给定的文本列名。以下是相应的修改:




谢谢

isdkz 发表于 2023-4-17 22:10:05

王大可2000 发表于 2023-4-17 22:08
谢谢

不客气,如果答案对你有帮助的话,给个最佳答案支持一下呗!{:5_92:}
页: [1]
查看完整版本: openpyxl之合并多个数据并修改列名