我有一个带有多张工作表的Excel文件。 我想将上述工作表中的数据复制到新工作表中,其中每一列将是上一个工作表中的一列。
我尝试了变量的不同位置(循环内,外部),不同的循环结构(第一个“处于范围内”,第二个“处于范围内”)无济于事。
我打开书并选择目标表:
wb = xw.Book('file.xlsx')
sheet = wb.sheets['final']
我启动每个原始工作表,就像这样:
en = wb.sheets['EN']
cz = wb.sheet['CZ']
et = wb.sheet['ET']
...
我有一个用“ langs”表示的工作表列表,我会对其进行迭代以从每个工作表中获取数据。
最后,我有了for循环:
for i in range(2,12):
langs = (cz,et,...,en)
column = chr(ord('c') + i)
col_min = column + '1'
col_max = column + str(row_count)
col_range = col_min + ':' + col_max
desc_range = 'S1:' + 'S' + str(wb['EN'].max_row)
for x in langs:
my_values = x.range(desc_range).options(ndim = 2).value
wb.sheets['final'].range(col_range).value = my_values
将数据复制到不同的列中是可行的,但是我的问题是我的循环将仅“使用”“ langs”中的最后一个元素-即。我可以看到它复制了来自cz和其他文件的文件,但最终值是来自en的文件-每一列都会发生这种情况。
因此,不用列:
'CZ' with data from 'CZ'
'ET' with data from 'ET'
每列是:
'EN' with data from 'EN'
我想每一列都包含来自每个工作表的数据,而不只是“ EN”
答案 0 :(得分:0)
我设法解决了这个问题。 而不是创建嵌套的for循环,而是将范围和列表压缩为1 for循环:
for i,x in zip((range(1,11)),langs):
column = chr(ord('c') + i)
col_min = column + '1'
col_max = column + str(row_count)
col_range = col_min + ':' + col_max
desc_range = 'S1:' + 'S' + str(wb['EN'].max_row)
my_values = x.range(desc_range).options(ndim = 2).value
wb.sheets['final'].range(col_range).value = my_values