【解決方法】Excel からすべてのシートを読み取り、出力ファイルに取り込むにはどうすればよいですか?


確かに! 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 データフレームの辞書、つまりシートの名前を返します:)

コメント

タイトルとURLをコピーしました