Pythonのexcelに対する基本的な操作方法

14799 ワード

1.はじめに
本論文は、Excel 2010をサポートするxlsx/xlsm/xltx/xltmフォーマットファイルであるPythonのサードパーティライブラリopenpyxlにより、どのバージョンのこれらのフォーマットもサポートできるはずである。
オンラインで城を攻略するライオンとして、pythonのエクセルに対する基本的な操作技能を使えばいいです。もちろんもっと上手になることができます。openpyxlを使って何の効果がありますか?私は後でみんなと1篇の の文章を共有したいので、中はexcelの操作に関連することができて、先にみんなにどのように基本的なexcelを操作するかを分かち合って、ついでに自分の知識を固めます。
来て、まず下の図のように、これはすべてのネットワークデバイスを保存する管理アドレステーブルです。pythonのopenpyxlライブラリを通して、ipアドレス情報や巡回命令などの情報を読めば、大量にネットワークデバイスの配置をバックアップできます。以前はpythonでtxtテキストを結びました。不便だと思ったら、python結合excelの方式に変えます。エクセルを編集するととても便利です。

2.実験環境
  • windown 10
  • Python 3.69
  • Pycharm
  • Python第三者ライブラリopenpyxl
  • エクセル2013
  • 説明:各実験環境は自由に組み合わせてください。pythonバージョンは3.x以上です。
    3.基本操作
    これから、一歩ずつ教えていきます。どうやって操作すればいいですか?
    3.1 openpyxl第三者ライブラリのインストール
    C:\>pip install openpyxl
    3.2新しいブックを作成する
    3.2.1ブックの新規作成
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    
    #        
    wb.save('simple_excel.xlsx')
    説明:このコードを実行すると、エクセルファイルが作成されます。simple_excel.xlsx、しばらくは内容がありません。
    3.2.2デフォルトシート
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    #              :sheet
    ws1 = wb.active
    #         :1_sheet
    ws1.title = '1_sheet'
    #        
    wb.save('simple_excel.xlsx')
    効果は以下の通りです。

    3.2.3シートの作成
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    #              
    ws1 = wb.active
    #         
    ws1.title = '1_sheet'
    #      3
    ws3 = wb.create_sheet(title='3_sheet', index=2)
    #      2
    ws2 = wb.create_sheet('2_sheet', 1)
    #      4
    ws4 = wb.copy_worksheet(ws3)
    #        
    wb.save('simple_excel.xlsx')
    パラメータの説明:
  • 属性title:シートの名前です。
  • メソッドcreate_sheet:新しいシートを作成します。indexはシートの順序索引で、0は最初の表を表します。
  • 方法のcopy_worksheet:シートのコピー;
  • 方法save:ファイルを保存して生成し、実行するたびに同名のファイルを上書きします。
  • 3.2.4シートの削除
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    #              
    
    # ...      ...
    
    ws4 = wb.copy_worksheet(ws3)
    
    #      
    wb.remove(ws4)
    
    #        
    wb.save('simple_excel.xlsx')
    説明:このステップは運行しません。
    3.2.5シートの色を設定する
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    
    # ...      ...
    
    #         
    ws1.sheet_properties.tabColor = '90EE90'
    ws2.sheet_properties.tabColor = '1E90FF'
    ws3.sheet_properties.tabColor = '90EE90'
    ws4.sheet_properties.tabColor = '1E90FF'
    
    #        
    wb.save('simple_excel.xlsx')
    パラメータの説明:
    属性tabColor:シートの背景色を設定し、RGB色を使用できます。
    効果は以下の通りです

    3.2.6セル書込みデータ
    シシシシ菗33846;は個々のデータを書き込む
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    
    # ...      ...
    
    #        
    #   1:
    ws1['A1'] = '  :'
    
    #   2:
    ws1.cell(row=1, column=1, value='  :')
    
    #        
    wb.save('simple_excel.xlsx') 
    一括書込みデータ
    
    from openpyxl import Workbook
    
    #     
    wb = Workbook()
    
    # ...      ...
    
    #        
    data = [
     ["device_name", "device_ip", "vendor", "model", "sn", "os", "version", "update_time"],
     ['switch-01', "192.168.1.1", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
     ['switch-02', "192.168.1.2", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
     ['switch-03', "192.168.1.3", "cisco", 'WS-C3560G-24TS', "FOC00000000", "cisco_ios", "12.2(50)SE5", "1 weeks, 1 minutes" ],
     ]
    for row in data:
     ws1.append(row)
    
    #        
    wb.save('simple_excel.xlsx') 
    パラメータの説明:
    apped:イテレーションオブジェクト(文字列、リスト、タプル...)に入ってきて、繰り返しセルに書き込みます。
    効果は以下の通りです

    3.2.7セルの背景色を設定する
    
    from openpyxl import Workbook
    from openpyxl.styles import PatternFill, Border, Side, Font, colors
    
    #     
    wb = Workbook()
    
    # ...      ...
    
    #         
    background_color = PatternFill(start_color='00BFFF', fill_type='solid')
    #     
    border = Border(left=Side(style='thin'),
      right=Side(style='thin'),
      top=Side(style='thin'),
      bottom=Side(style='thin'))
    font_type = Font(color=colors.WHITE,
       size=12,
       b=True,
       bold=True)
     #       
    Align = Alignment(horizontal='center', vertical='center')
     #     cell     
    for row in ws1.iter_rows(min_row=2,max_row=2):
     for cell in row:
     cell.fill, cell.font, cell.alignment = background_color, font_type, Align
    パラメータの説明:
  • 類Pattern Fill:start_カラー、end_カラーは背景色、図案色、図案様式である。
  • 種類のBorder:線の幅、対角線などの外枠線スタイルを設定します。
  • 種類のFont:フォントの色、サイズ、下線などを設定します。
  • クラスのAlignment:テキストの配置、水平配置、垂直配置を設定します。
  • 効果は以下の通りです

    3.2.8セルの結合
    
    # ...    ...
    
    #      
    ws1.merge_cells('A1:H1')
    ws1.unmerge_cells('A1:H1')
    
    # ...    ...
    パラメータの説明:
  • merge_セルを結合する
  • unmerge_セルの結合をキャンセルします。

  • 3.2.9列のセルの幅を自動的に調整する
    
    from openpyxl import Workbook
    from openpyxl.styles import PatternFill, Border, Side, Font, colors,Alignment
    from openpyxl.utils import get_column_letter
    
    #     
    wb = Workbook()
    
    # ...      ...
    
    #          
    #        cell     ,          。
    all_ws = wb.sheetnames
    for ws in all_ws:
     dims = {}
     ws = wb[ws]
     for row in ws.rows:
     for cell in row:
      if cell.value:
      dims[cell.column] = max(dims.get(cell.column, 0), len(str(cell.value)))
      
     for col, value in dims.items():
     ws.column_dimensions[get_column_letter(col)].width = value + 3
     dims.clear()
    考え方の解読:
    最初に列のすべてのデータの最大長さを見つけて、この長さによってセルの幅を自動的に調整します。
  • は、最初に空の辞書dimsを定義し、キーのペアを保存するために使用されます。
  • 各列のセルvalue長さは1つずつ比較して最大値を取得し、最後に最も最大値を取得し、列ごとの幅値widthとします。
  • 方法get_コロムン.letter():cell.com lumnの整数値1、2、3…を列文字列'A'、'B'、'C'に変換することです。
  • 方法column_dimensions:widthで列の幅を設定します。もうちょっと大きくしてください。
  • 効果は以下の通りです

    3.2.10グラフ
    
    from openpyxl.chart import BarChart3D, Reference
    
    # ...      ...
    
    
    #         
    data = [
     ["Fruit", "2017", "2018", "2019", "2020"],
     ['Apples', 10000, 5000, 8000, 6000],
     ['Pears', 2000, 3000, 4000, 5000],
     ['Bananas', 6000, 6000, 6500, 6000],
     ['Oranges', 500, 300, 200, 700],
    ]
    for row in data:
     ws2.append(row)
     
    #    3D   
    chart = BarChart3D()
    chart.type = 'col'
    chart.style = 10
    chart.title = '     '
    chart.x_axis.title = '  '
    chart.y_axis.title = '  '
    
    # set_categories() X     , add_data() y     
    data = Reference(ws2, min_col=2, min_row=1, max_col=5, max_row=5)
    series = Reference(ws2, min_col=1, min_row=2, max_row=5)
    chart.add_data(data=data, titles_from_data=True)
    chart.set_categories(series)
    ws2.add_chart(chart, 'A7')
    パラメータの説明:
  • 属性type:列colと水平バーの両方を設定できます。
  • 属性style:スタイルを設定して、整数値の1~48の間です。
  • 属性title:タイトルの設定;
  • 属性x_axis.title:x軸のタイトル。
  • 属性y_axis.title:y軸のタイトル。
  • 類Reference:セル範囲のデータを参照する。
  • 方法add_data:Y軸データ設定;
  • 方法set_categories:X軸データの設定;
  • 効果は以下の通りです

    3.3ブックの読み込み
    既に存在しているエクセルファイルをload_workbook方法でロードし、read_only読み取り専用でコンテンツを読み込んで編集できません。load_workbook方法パラメータ:
  • filename:ファイルパスまたはファイルオブジェクト。
  • read_only:読み取り専用かどうか、読書に対して最適化しました。内容は編集できません。
  • keep_vba:vba内を保留しますか?
  • data_ONly:セルは数式または結果を保持しますか?
  • keep_links:外部リンクを保留するかどうか、デフォルトで保留します。
  • 3.3.1シートを取得する
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #        
    print('     : ', wb.sheetnames)
    
    #      
    wb.close()
    
    
    #       :
         : ['1_sheet', '2_sheet', '3_sheet', '3_sheet Copy']
    パラメータの説明:
  • パラメータread_only=True: モードでブックを開くことを表します。
  • 方法sheetnames:リスト形式のシート名を返します。
  • 方法close():read-onlywrite-onlyモードでのみ使用すればよく、以下同様であるため、何度も説明しない。
  • 3.3.2シートを巡回する
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #        
    print(' 1    :', wb.sheetnames[0])
    print(' 2    :', wb.sheetnames[1])
    print(' 3    :', wb.sheetnames[2])
    print(' 4    :', wb.sheetnames[3])
    #        
    for ws in wb.sheetnames:
     print(ws)
    
    #      
    wb.close()
    
    
    #       :
     1    : 1_sheet
     2    : 2_sheet
     3    : 3_sheet
     4    : 3_sheet Copy
    1_sheet
    2_sheet
    3_sheet
    3_sheet Copy
    3.3.3セルのデータを取得する
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #         
    ws1 = wb[wb.sheetnames[0]]
    #   
    # ws1 = wb['1_sheet']
    
    #        
    print(f"       : {ws1['A3'].value}")
    
    #            
    for row in ws1['A3:H3']:
     for cell in row:
     print(f"          : {cell.value}")
    
    #      
    wb.close()
    
    
    #       :
           : switch-01
     
              : switch-01
              : 192.168.1.1
              : cisco
              : WS-C3560G-24TS
              : FOC00000000
              : cisco_ios
              : 12.2(50)SE5
              : 1 weeks, 1 minutes 
    3.3.4巡回
    行を指定
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #         
    ws1 = wb[wb.sheetnames[0]]
    
    #      
    for cell in ws1['2']:
     print(cell.value)
     
    #      
    wb.close()
    
    
    #       :
    device_name
    device_ip
    vendor
    model
    sn
    os
    version
    update_time
    行の範囲を指定
    
    # ...     ...
    
    #      
    for row in ws1['2:3']:
     for cell in row:
     print(cell.value)
     
    # ...     ...
    
    
    #       :
    device_name
    device_ip
    vendor
    model
    sn
    os
    version
    update_time
    switch-01
    192.168.1.1
    cisco
    WS-C3560G-24TS
    FOC00000000
    cisco_ios
    12.2(50)SE5
    1 weeks, 1 minutes
    方法iter_ローソン、遍歴
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #         
    ws1 = wb[wb.sheetnames[0]]
    
    #      
    for row in ws1.iter_rows(min_row=2, max_row=2, min_col=1, max_col=8):
     for cell in row:
     print(f"     :{cell.value}")
     
    #      
    wb.close()
    
    
    #       :
         :device_name
         :device_ip
         :vendor
         :model
         :sn
         :os
         :version
         :update_time
    パラメータの説明:
    方法iter_rows:この方法により、各行のデータを巡回することができ、tupleによって、セルデータを再び循環して.valueによって取得することができる。
    3.3.5巡回
    列を指定
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx', read_only=True)
    
    #         
    ws1 = wb[wb.sheetnames[0]]
    
    #      
    for cell in ws1['A']:
     print(cell.value)
     
    #      
    wb.close()
    
    
    #       :
      :
    device_name
    switch-01
    switch-02
    switch-03
    列の範囲を指定
    
    # ...     ...
    
    #      
    for col in ws1['A:B']:
     for cell in col:
     print(cell.value)
     
    # ...     ... 
     
    #       :
      :
    device_name
    switch-01
    switch-02
    switch-03
    None
    device_ip
    192.168.1.1
    192.168.1.2
    192.168.1.3
    方法iter_cols、巡回
    
    from openpyxl import load_workbook as open
    #     
    wb = open('simple_excel.xlsx')
    
    #         
    ws1 = wb[wb.sheetnames[0]]
    
    #      
    for col in ws1.iter_cols(min_row=3, max_row=5, min_col=1, max_col=1):
     for cell in col:
     print(f"     :{cell.value}")
     
    #      
    wb.close()
    
    
    #       :
         :switch-01
         :switch-02
         :switch-03
    パラメータの説明:
    方法iter_cols:この方法により、各列のデータを巡回することができ、tupleである。セルデータは再び.valueで取得でき、またiter_rowsとは異なる。workbookはread_only=Trueを使用できません。
    付録openpyxl公式文書
    openpyxl
    RGB色参照
    RGB色参照
    ここでPythonのエクセルの基本操作についての文章を紹介します。Python excelの操作内容については以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。
    ここでPythonのエクセルに対する基本的な操作方法についての文章を紹介します。Python excelの操作内容については以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。