Есть ли способ выровнять два отдельных файла Excel, чтобы каждый элемент в одном файле имел уникальный соответствующий элемент в другом файле? Код почти работает - PullRequest
0 голосов
/ 03 января 2019

У меня есть два файла Excel, которые необходимо выровнять в том смысле, что каждая строка из одного файла Excel имеет уникальную соответствующую строку в другом файле Excel, если это будет соответствующая точка данных или пустое значение.Файлы Excel не имеют одинаковый размер и имеют некоторые значения, которые совпадают, а некоторые - нет, однако они оба располагаются в последовательном порядке.

Я пытаюсь сделать это путем вставки пустых строк.У меня возникают проблемы при вставке правильного количества пустых строк, когда нет совпадения, и затем переход к следующему значению.Я считаю, что мой код очень близок к работе.Также включенные в код оба измененных файла Excel объединены в один файл в виде отдельных вкладок.

j=0
iterations=100+Branch_Flow_Pre.max_row
for i in range(2, iterations):
    #if str(Branch_Flow_Pre.cell(row=i, column=1).value) == "None" and str(Branch_Flow_Post.cell(row=i, column=1).value) == "None":
    #   print("blanks, i = ",i,"j = ",j)            
    #   i += 1
    if Branch_Flow_Pre.cell(row=i, column=2).value == Branch_Flow_Post.cell(row=i, column=2).value and Branch_Flow_Pre.cell(row=i, column=8).value == Branch_Flow_Post.cell(row=i, column=8).value:
        print("match, i = ",i,"j= ",j)
        i += 1
    else:
        j=0
        while j<21:
            if Branch_Flow_Pre.cell(row=i+j, column=2).value == Branch_Flow_Post.cell(row=i, column=2).value and Branch_Flow_Pre.cell(row=i+j, column=8).value == Branch_Flow_Post.cell(row=i, column=8).value:
                if j!=0:
                    for x in range(0, j+1):
                        Branch_Flow_Post.insert_rows(i)
                        print("insert Post, x = ",x,"i = ",i,"j = ",j)
                else:
                    print("error")
                i = i+j
                j=21
                break
            elif Branch_Flow_Pre.cell(row=i, column=2).value == Branch_Flow_Post.cell(row=i+j, column=2).value and Branch_Flow_Pre.cell(row=i, column=8).value == Branch_Flow_Post.cell(row=i+j, column=8).value:
                if j!=0:
                    for x in range(0, j+1):
                        Branch_Flow_Pre.insert_rows(i)
                        print("insert Pre, x = ",x,"i = ",i,"j = ",j)
                else:
                    print("error")
                i = i+j
                j=21
                break
            elif j==20:
                Branch_Flow_Post.insert_rows(i)
                print("break, i = ",i,"j = ",j," Insert Post")
                i += 1
                j = 21
                break
            else:
                print("increment, i = ",i,"j = ",j)
                j += 1
c=1
r=2
for row in Branch_Flow_Pre.values:
    for v in row:
        BF_Pre.cell(row=r, column=c).value = v
        c += 1
    c=1
    r += 1

c=1
r=2
for row in Branch_Flow_Post.values:
    for v in row:
        BF_Post.cell(row=r, column=c).value = v
        c += 1
    c=1
    r += 1

book3.save(outfilename)
## the rest is not code
desired output:
Input1  Input2  Output1  Output2
 A 1     B 2      A 1  
 B 2              B 2      B 2
 C 3     C 3       
         x y      C 3      C 3
         D 4               x y
 D 4                       
                  D 4      D 4

Actual output:
Input1  Input2  Output1  Output2
 A 1     B 2      A 1  
 B 2              B 2      B 2
 C 3     C 3       
         x y      C 3      
         D 4               
 D 4                       
                  D 4      
                           C 3
                           x y
                           D 4

1 Ответ

0 голосов
/ 01 февраля 2019

Мне удалось исправить код, добавив дополнительные условия, которые не позволяют пустым ячейкам считаться приемлемым соответствием. Вот изображение моего рабочего скрипта:

рабочий код

Эта функция выполнит сравнение двух вкладок Excel с похожими данными и выровняет две вкладки, чтобы каждый элемент имел уникальный элемент на другой вкладке. В качестве альтернативы вы можете думать об этом как о функции, которая будет помещать совпадающие элементы в один и тот же номер строки Excel на каждой вкладке, чтобы можно было легко провести сравнение между ними.

...