合并Excel电子表格的第二列

时间:2017-07-26 17:24:10

标签: python excel excel-vba excel-formula vba

我目前有大约100个excel文件,每个文件有两列。第一列包含“标题”,第二列包含值。它们看起来都是这样的:

ExcelSpreadsheet

我想组合这些,以便有一个最终的excel文件包含来自所有这些的数据;所以它看起来像这样(只是用更多的列):

Combined (How it should look at the end, but with all 100 columns)

另一个问题是,并非所有文件都具有相同顺序的标头。例如,如果您查看“合并”图片,您会看到这两个项目有共同的标题。但是,在某些其他文件中,可以切换标题顺序。例如,“GPU变体”可以在“GPU名称”等之前。

基本上,这就是我需要做的事情。找到一种方法来组合所有这些电子表格的第二列,然后找到一种方法对它们进行排序,以便它们匹配第一列。

如果有一种方法可以编程宏来执行此操作,有人可以指导我如何执行此操作吗?是否有外部程序已经设计用于执行此操作? Excel VBA可能吗?这是我现在的代码,但我认为这不能正确解决它:

import xlwt
import xlrd
import os
import csv


current_file = xlwt.Workbook()
write_table = current_file.add_sheet('sheet1', cell_overwrite_ok=True)

key_list = [u'GPU Name:', u'GPU Variant:', u'Architecture:', u'Process Size:', u'Transistors:', u'Die Size:', u'Released:']
for title_index, text in enumerate(key_list):
    write_table.write(0, title_index, text)


file_list = ['2874.csv', '2875.csv']

i = 1
for name in file_list:
    data = xlrd.open_workbook(name)

table = data.sheets()[0]
nrows = table.nrows
for row in range(nrows):
    if row == 0:
        continue
    for index, context in enumerate(table.row_values(row)):
        write_table.write(i, index, context)
    i += 1


current_file.save(os.getcwd() + '/result.csv')

1 个答案:

答案 0 :(得分:0)

  

评论:我继续在第三,第四,第五等栏目中“失踪”

添加以下print(...修改问题以显示输出

            for values in csv_reader:
                # Init Header Order
                header_keys.append(values['header'])
                ws.append((values['header'], values['data']))
            print('header_keys:{}'.format(header_keys)
        else:
  

问题:...合并所有的第二列...对它们进行排序,使它们匹配第一列

以下是csv/openpyxl解决方案:
读取n个CSV文件会聚合第二个列,就像在第一个CSV文件中一样。

from openpyxl import Workbook
import csv

wb = Workbook()
ws = wb.worksheets[0]

header_keys = []
for n, fName in enumerate(['2874.csv', '2875.csv']):
    with open(fName) as fh:
        csv_reader = csv.DictReader(fh, fieldnames=['header', 'data'], delimiter='\t')
        if n == 0:
            for values in csv_reader:
                # Init Header Order
                header_keys.append(values['header'])
                ws.append((values['header'], values['data']))
        else:
            # Read all Data to Dict 
            data = {}
            for values in csv_reader:
                data[values['header']] = values['data']

            # Write all Data in header_keys Order
            column = n + 2
            for row, key in enumerate(header_keys, 1):
                try:
                    ws.cell(row=row, column=column).value = data[key]
                except:
                    print('FAIL: Key "{}" not in Dict data'.format(key))
                    ws.cell(row=row, column=column).value = 'MISSING'

wb.save('result.xlsx')

使用Python测试:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2