我目前有大约100个excel文件,每个文件有两列。第一列包含“标题”,第二列包含值。它们看起来都是这样的:
我想组合这些,以便有一个最终的excel文件包含来自所有这些的数据;所以它看起来像这样(只是用更多的列):
另一个问题是,并非所有文件都具有相同顺序的标头。例如,如果您查看“合并”图片,您会看到这两个项目有共同的标题。但是,在某些其他文件中,可以切换标题顺序。例如,“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')
答案 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