合并Excel电子表格的第二列
我目前有大约100个有两列的excel文件。 第一列包含“标题”,第二列包含值。 他们每个看起来像这样:
我想结合这些,以便有一个最终的Excel文件包含所有这些数据; 所以它会看起来像这样(只是用更多的列):
另一个问题是,并不是所有的文件都有相同顺序的头文件。 例如,如果您查看“合并”图片,则会看到这两个项目具有共同的标题。 但是,在其他一些文件中,标题顺序可能会被切换。 例如,“GPU变体”可以在“GPU名称”等之前
所以基本上,这是我需要做的。 find一种方法来组合所有这些电子表格的第二列,然后find一种方法对它们进行sorting,使它们匹配第一列。
如果有一种方法来编程macros来做到这一点,有人可以指导我如何做到这一点? 是否有外部程序已经被devise来做到这一点? 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')
评论 :我一直在第三,第四,第五等栏目中“失踪”
添加以下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:
问题 :…结合所有的第二列…sorting,以便他们匹配第一列
以下是一个csv/openpyxl
解决scheme:
读取n个CSV文件会聚集第二列,如第一个CSV文件中sorting。
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')
用Pythontesting:3.4.2 – openpyxl:2.4.1 – LibreOffice:4.3.3.2