Сравнить 2 xlsx таблицы и дозаписать несовпадения в одну из них
Есть 2-е xlsx таблицы. Одна - "База", а вторая - "обновленная расширенная база". Нужно сравнить две этих таблицы по 'C' столбцу(названия) и, если у значений 'C' столбцов нет совпадений, дописать в первую таблицу("база") всю строку из обновленной базы, столбец 'C' которой не найден в первой таблице "База". Дописывать нужно в первую пустую строку таблицы 1 "База". Я попробовал что-то написать, но этот код просто копирует таблицу 2 в таблицу 1. По идее здесь нужно условие в условии. Поясню - какой-то код, который говорит "ЕСЛИ значения из C[от 1 до последнего].sheet2 != C[от 1 до последнего].sheet, то записать в sheet всю строку, ЕСЛИ строка в sheet пустая."
import string
from openpyxl import load_workbook
wb = load_workbook(filename = 'baza1.xlsx')
sheet = wb['Ассортимент']
wb2 = load_workbook(filename = 'baza2-obshaya.xlsx')
sheet2 = wb2['Ассортимент']
idx=0
def write_cells(name):
sheet2['C' + str(56 + idx)] = name
for i in range(sheet2.max_row):
if sheet2['C' + str(5 + idx)].value != sheet['C'+ str(5 + idx)].value:
write_cells(name = str(sheet['C'+ str(5 + idx)]))
idx+=1
wb.save(filename='baza1.xlsx')
Ответы (1 шт):
После 12-ти часов гугления, благодаря усилию Namerek(посоветовал годную библу) скомпозитил нужный мне код, который делает то, что мне нужно:
import pandas as pd
import xlwt
from openpyxl import load_workbook
df1 = pd.read_excel(r'baza2-obshaya.xlsx', sheet_name='Ассортимент', header=None)
df2 = pd.read_excel(r'baza1.xlsx', sheet_name='Ассортимент', header=None)
df = (df1[~df1[2].isin(df2[2])])
def append_df_to_excel(filename, df, sheet_name='Ассортимент', startrow=55, truncate_sheet=False, **to_excel_kwargs): #startrow надо менять. По умолчанию стоит "None"
writer = pd.ExcelWriter('baza1.xlsx', engine='openpyxl')
writer.book = load_workbook(filename = 'baza1.xlsx')
if startrow is None and sheet_name in writer.book.sheetnames:
startrow = writer.book[sheet_name].max_row
writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
if startrow is None:
startrow = 0
df.to_excel(writer, sheet_name, startrow=startrow, index=False, header=None, **to_excel_kwargs)
writer.save()
append_df_to_excel('baza1.xlsx', df)