82876


Python3 と openpyxl のライブラリを使って、Excelの列をコピーして別のエクセルへ貼り付けています。  
下記の方法で行うと元のエクセルのデータが列が増えた分  
新規のエクセルへ貼り付けます。  
openpyxl以外により良い簡単方法ないでしょうか。  
PANDASでも可能でしょうか。

①Excelデータ

No | 駅 | 駅2 | フラグ  
---|---|---|---  
1 | 東京 | 品川 | 処理済み  
2 | 原宿 | 原宿 | 処理済み  
3 | 日暮里 | 秋葉原 |  
4 |  東京 | 原宿 |  
5 | 池袋  | @@@ |  
  
②Excelデータ

No | 駅 | 駅2  
---|---|---  
1 | 東京 | 品川  
2 | 原宿 | 原宿  
3 |  | 秋葉原  
4 |  | 原宿  
5 | 池袋 | @@@  
  
（実現内容）  
＞①のEXCELフラグの列をコピーして②のEXCELへ貼り付ける

No | 駅 | 駅2 | フラグ  
---|---|---|---  
1 | 東京 | 品川 | 処理済み  
2 | 原宿 | 原宿 | 処理済み  
3 |  | 秋葉原 |  
4 |  | 原宿 |  
5 | 池袋 | @@@ |  
  
コード

[code]

    # #EXCELflag別へのエクセルへ貼り付ける
    from datetime import datetime as dt, date, timedelta
    import openpyxl
    
    
    file_time= dt.now().strftime("%Y%m%d")
    
    filename_xlsx="TEST1.xlsx"
    file_completion = "TEST2.xlsx"
    
    wb = openpyxl.load_workbook(filename_xlsx)
    ws = wb['Sheet1']
    i = 1
    for row in ws.iter_rows():
        #[if cell.col_idx == 1:] で、コピー元の①ExcelデータD列を指定しています。
        for cell in row:
            if cell.col_idx == 1:
                ws.cell(row=i, column=1).value = cell.value
                i = i + 1
    wb.save(file_completion)
    #別名で保存
        
    
[/code]

よろしくお願い致します。


CC BY-SA 4.0
2021-10-01T09:13:42.870
82796
2021-10-05T00:37:47.443
2021-10-04T02:08:16.563
18859
18859
question
python python3
PythonでEXCELの列を別へのエクセルへ貼り付けたい[より簡単な方法]


行数の少なさ、処理の理解しやすさ、といった面ではpandasを使って以下のように出来るでしょう。

[code]

    import pandas as pd
    
    df1 = pd.read_excel('TEST1.xlsx')
    df2 = pd.read_excel('TEST2.xlsx')
    
    df2['フラグ'] = df1['フラグ']
    
    df2.to_excel('TEST2.xlsx', index=False)
    
[/code]

ただし、pandasの`.to_excel()`を使うとヘッダーの行が以下のように太字かつ罫線付きに変わります。

[![pandas_TEST2](https://i.stack.imgur.com/QaKex.jpg)](https://i.stack.imgur.com/QaKex.jpg)

* * *

こちらの記事を参考に`df2.to_excel()`を以下のように置き換えて極力見た目を合わせることは可能ですが、せっかくデータの処理は簡単に出来るのに書き込み処理がこれでは本末転倒でしょうね。  
[pandasでExcel書込み時に幅/高さ,中央揃え,折り返しをStyleFrameで変更する](https://yuki.world/pandas-
dataframe-excel-styling/)  
[styleframe](https://styleframe.readthedocs.io/en/latest/index.html)

[code]

    from styleframe import StyleFrame, Styler, utils
    style = Styler(font='游ゴシック', font_size=11, bold=False, border_type=None, fill_pattern_type=None, horizontal_alignment=utils.horizontal_alignments.left)
    styleNum = Styler(font='游ゴシック', font_size=11, bold=False, border_type=None, fill_pattern_type=None, horizontal_alignment=utils.horizontal_alignments.right)
    
    with StyleFrame.ExcelWriter('TEST2.xlsx') as writer:
        sf = StyleFrame(df2, styler_obj=style)
        sf.apply_headers_style(styler_obj=style)
        sf.apply_column_style(cols_to_style='No', styler_obj=styleNum, style_header=True)
        sf.to_excel(writer, index=False)
    
[/code]

[![StyleFrame_TEST2](https://i.stack.imgur.com/uJjye.jpg)](https://i.stack.imgur.com/uJjye.jpg)


CC BY-SA 4.0
2021-10-05T00:32:02.610
82876
2021-10-05T00:37:47.443
2021-10-05T00:37:47.443
26370
26370
82796
answer