匹配两个.xlsx文件中的唯一列,如果匹配,则使用openpyxl追加更新else



我有两个excel文件,master和child。两个文件中的所有列名都相同。

我想匹配两个文件的列C,如果匹配,则更新该特定行的所有列,如果不匹配,则将该行追加到主文件的末尾。

我想根据这个逻辑将数据从子文件更新到主文件。到目前为止,我可以通过将所有数据从子文件复制到主文件来更新主文件,但主文件中的数据正在从指定范围的子文件中替换。任何帮助都将不胜感激。

import openpyxl 
Master = openpyxl.load_workbook("Master.xlsx")
Child = openpyxl.load_workbook("Child.xlsx")
Master_File = Master["Sheet1"]
Child_File = Child["Sheet1"]

从子文件复制行和列的功能

def copyRange(startCol, startRow, endCol, endRow, sheet):
rangeSelected = []
#Loop through selected rows------------------------------------------------
for i in range(startRow, endRow + 1, 1):
#Appends to row selected list--------------------------------------------
rowSelected = []
for j in range(startCol, endCol + 1, 1):
rowSelected.append(sheet.cell(row=i, column=j).value)
#Adds the rowSelected list and nests inside rangesSelected list------------------------------
rangeSelected.append(rowSelected) 
return rangeSelected

将所有数据粘贴到主文件的功能

def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving, copiedData):
countRow = 0
for i in range(startRow, endRow + 1, 1):
countCol = 0
for j in range(startCol, endCol + 1, 1):
sheetReceiving.cell(row=i, column=j).value = copiedData[countRow][countCol]
countCol += 1
countRow += 1

主要功能

def createData():
wb = Workbook()
print("Your data is being Processed.....")
selectedRange = copyRange(1,10,39,45, Child_File)
pastingRange = pasteRange(1,10,39,45, Master_File, selectedRange)
Master.save(r"Final.xlsx")
print("Range copied and pasted")


Final = createData()

这演示了如何获取两个数据帧(它们都可以从panda中的.read_excel((创建(,将索引列设置为要匹配的列,并使用第二个数据帧中的匹配项更新原始数据帧,然后再次写入xlsx。

import pandas as pd
#df = pd.read_excel('myfile1.xlsx')
df = pd.DataFrame({'C': [1, 2, 3],
'D': [400, 500, 600]})
#new_df = pd.read_excel('myfile2.xlsx')
new_df = pd.DataFrame({'C': [1, 2, 6],
'D': [7, 8, 9]})
df.set_index('C', inplace=True)
df.update(new_df.set_index('C'))
df.update(new_df)
df.reset_index().to_excel('updated.xlsx', index=False)

输出

C   D
0   1   8.0
1   2   9.0
2   3   600.0

最新更新