【问题标题】:Combining excel workbook sheet into one using python使用python将excel工作簿合并为一张
【发布时间】:2018-05-24 10:24:47
【问题描述】:

我有大约 30 个 Excel 工作簿需要合并为一个。每个工作簿都有可变数量的工作表,但我需要从每个工作簿组合的工作表称为“输出”,并且此工作表中列的格式是一致的。

我需要从第一个文件导入输出表,然后附加其余文件并忽略标题行。

我曾尝试使用 glob/pandas 来做到这一点,但无济于事。

【问题讨论】:

  • 向我们展示您尝试过的代码。使用 pd.concat() 熊猫应该没问题
  • 试试这个:pd.concat(pd.read_excel(i, sheet_name='output') for i in os.listdir(".") if i.endswith('xlsx'))

标签: python excel pandas


【解决方案1】:

您可以使用openpyxl。这是代码的草图:

from openpyxl import load_workbook

compiled_wb = load_workbook(filename = 'yourfile1.xlsx')
compiled_ws = compiled['Output']

for i in range(1, 30):
    wb = load_workbook(filename = 'yourfile{}.xlsx'.format(i))
    ws = wb['Output']
    compiled_ws.append(ws.rows()[1:]) # ignore row 0

compiled_wb.save('compiled.xlsx')

【讨论】:

    【解决方案2】:

    克林顿展示的方法 c.布朗利在Foundations for Analytics with Python

    在 shell 中执行,指明包含 excel 文件的文件夹的路径(确保定义 all_workbooks 的参数正确),然后是 excel 输出文件,如下所示:

    python script.py <the /path/ to/ excel folder/> < your/ final/output.xlsx> 
    

    脚本.py:

    import pandas as pd
    import sys
    import os
    import glob
    input_path = sys.argv[1]
    output_file = sys.argv[2]
    all_workbooks = glob.glob(os.path.join(input_file, '*.xlsx'))
    all_df = []
    for workbook in all_workbooks:
        all_worksheets = pd.read_excel(workbook, sheetname='Output',    index_col=None)
        for worksheet, data in all_worksheets.items:
            all_df.append(data)
    data_concatenated = pd.concat(all_df, axis=0, ignore_index=True)
    writer = pd.ExcelWriter(output_file)
    data_concatenated.to_excel(writer, sheetname='concatenated_Output',  index=False)
    writer.save()
    

    【讨论】:

    • 脚本错误:我在 pd.concat 上需要“all_worksheets.items()”而不是“all_worksheets.items”和 axis=1。 “sheetname”必须是 to_excel 中的“sheet_name”(至少是最新版本),并且应该是 read_excel 中的“sheet_name”以避免出现警告。
    • 这在@OutfastSource 解决方案的帮助下就像一个魅力,还安装了 xlrd 包,但它只是将所有东西放在轴 = 1 上并在轴 = 0 上彼此下方。我需要它这样它复制粘贴一个工作表,然后转到最底部的行,然后从同一文件夹中的不同工作簿复制粘贴相同的工作表。那么如何调整此代码以执行所需的功能??
    【解决方案3】:

    这可能会被否决,因为这不是 Python 的答案,但老实说,我不会将 Python 用于此类任务。我认为你最好安装下面的插件,并将其用于工作。

    https://www.rondebruin.nl/win/addins/rdbmerge.htm

    单击“在文件位置选择中合并文件夹中的所有文件”,然后单击“使用工作表名称”=“输出”,最后,我认为您想要“第一个单元格”。祝你好运!

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多