[ad_1]
確かに! 2 つの Excel ファイルがあり、それぞれに複数のシートが含まれています。 既存のコードでは、データ フレームを使用して、両方のファイルの特定のシートを比較するロジックを実装し、望ましい結果が得られています。
ただし、問題は、私のコードが現在両方のファイルからその特定のシートのみを取得することです。 しかし、入力ファイルの残りのシートも出力ファイルに含めるように既存のコードを変更したいと考えています。 どうすればこれを達成できますか?
私が試したこと:
私が試したコード:
Python
import pandas as pd import numpy as np import openpyxl from openpyxl import load_workbook from openpyxl.styles import PatternFill, Border, Side df1= pd.read_excel(r'D:\excel1.xlsx','Sheet1',na_values=['NA']).fillna('') df2= pd.read_excel(r'D:\excel2.xlsx','Sheet2',na_values=['NA']).fillna('') df1 = df1.set_index('ID') df2 = df2.set_index('ID') df3 = pd.concat([df1,df2], sort=True, copy=True) df3a = df3.stack().explode().groupby(level=[0,1]).apply(lambda x: ', '.join(map(str, x.unique()))).unstack(1).copy() df3a['status'] = "" df3a.loc[~df3a.index.isin(df2.index),'status'] = 'old' # if not in df2 index df3a.loc[~df3a.index.isin(df1.index),'status'] = 'new' # if not in df1 index idx = df3.stack().groupby(level=[0,1]).nunique() # get modified cells. df3a.loc[idx.mask(idx <= 1).dropna().index.get_level_values(0),'status'] = 'modified' df3a['status'] = df3a['status'].fillna('same') # assume that anything not fufilled by above rules is the same. reorder_columns = df1.columns.tolist() + ['status'] df3a = df3a[reorder_columns] #-------------------------------------Highlight rows with different colors---------------------------------------------------------------------------# with pd.ExcelWriter(r'D:\excel_output.xlsx') as writer: df3a.to_excel(writer, sheet_name='Sheet1', index=True) workbook = load_workbook(r'D:\excel_output.xlsx') sheet1 = workbook['Sheet1'] #rest of the code I implemented logic to apply formatting to that particular sheets.......... sheet1.delete_cols(13) workbook.save(r'D:\excel_output.xlsx')
解決策 1
必要なのは、ワークブック内のワークシートを反復処理することだけです。 したがって、次のようなものでは、ワークブック内のシート名がリストされます。
Python
workbook = load_workbook(r'D:\excel1.xlsx') for sheet in workbook.worksheets: print(sheet.title)
したがって、他のワークブックにも同様のものが必要です。 次に、比較するワークシートのペアをそれぞれ選択し、その詳細をコンテンツを処理する関数に渡すことができます。
解決策 2
シートの名前は、パンダのデータフレーム メソッドを通じて取得できます。 見る:
Python
import pandas import openpyxl # read workbook: df = pandas.read_excel("D:\\ConflictData.xlsx", None) # then - method 1: print(df.keys())
ご覧のように、 df
データフレームの辞書、つまりシートの名前を返します:)
[ad_2]
コメント