For循环返回最后一个值| python,xlwings

时间:2019-07-25 09:45:08

标签: python excel for-loop xlwings

我有一个带有多张工作表的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”

1 个答案:

答案 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