pywin32 の利用
Python で Excel を扱うパッケージは openpyxl ですが、Excel の仕様に合わせてファイルを作成しているだけなので、Autofill が利用できません。そこで、ここでは pywin32 を使用して Excel.Application を直接操作します( 実行する PC は Windows で Excel がインストールされている必要があります )。その前に pip そのものの更新確認
python -m pip install --upgrade pip先日 pip からアップグレードしようとしたら、見事にバグって pip が無くなってしまいました。その場合は https://bootstrap.pypa.io/get-pip.py から get-pip.py をダウンロードして python get-pip.py を実行します。 それ以降、python から アップグレードするようにしています。pywin32 のインストール
pip install pywin32pywin32 は、Windows の COM を処理する為のブリッジです。ですから、Excel.Application に限らず 以下のようなクラスを利用できるようになります。 ✅ ADODB.Connection ✅ ADODB.Recordset ✅ ADODB.Stream ✅ WScript.Shell ✅ Shell.Application ✅ Scripting.FileSystemObject ✅ Msxml2.ServerXMLHTTP ✅ CDO.Message ✅ Scripting.Dictionary ▼ pip listexcel-autofill.py
Autofill する為に範囲を選択していますが、Sheet.Cells(1, 2) のように数字で全て表現できるようにしています。これはプログラミングを容易にする事が目的ですが、視認しやすいように Range("A1:A2") と言うような記述方法も可能です
import win32com.client import traceback import sys import os ExcelApp = win32com.client.Dispatch("Excel.Application") # デバッグ時は、Excel の本体を表示させて状況が解るようにする ExcelApp.Visible = True # UI でチェックさせるようなダイアログを表示せずに実行する ExcelApp.DisplayAlerts = False try: # **************************** # ブック追加 # **************************** Book = ExcelApp.Workbooks.Add() # 通常一つのシートが作成されています Sheet = Book.Worksheets( 1 ) # **************************** # シート名変更 # **************************** Sheet.Name = "Pythonの処理"; # **************************** # セルに値を直接セット # **************************** for i in range(1, 11): Sheet.Cells(i, 1).Value = f"処理 : {i}" # **************************** # 1つのセルから # AutoFill で値をセット # **************************** Sheet.Cells(1, 2).Value = "子" # 基となるセル範囲 SourceRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(1,2)) # オートフィルの範囲(基となるセル範囲を含む ) FillRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(10,2)) SourceRange.AutoFill(FillRange) # **************************** # 保存 # **************************** Book.SaveAs( os.getcwd() + "\\sample.xlsx" ) except Exception: ExcelApp.Quit() traceback.print_exc() sys.exit( ) ExcelApp.Quit() print("処理を終了します")
openpyxl で Autofill 無しの処理
import openpyxl import traceback import sys try: # **************************** # 新しいブックを作成 # **************************** Book = openpyxl.Workbook() # **************************** # 通常一つのシートが作成されています # **************************** Sheet = Book.worksheets[0] # **************************** # シート名変更 # **************************** Sheet.title = "Pythonの処理" # **************************** # セルに値を直接セット # **************************** for i in range(1, 11): Sheet.cell(i, 1, f"処理 : {i}") Sheet.merge_cells("C1:F1") Sheet.cell(1, 3).value = "結合されたセル" Book.save('sample.xlsx') except Exception: traceback.print_exc() sys.exit( ) print("処理を終了します")
関連する記事
JScript : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する関連する Microsoft ドキュメント
Application オブジェクト Workbook オブジェクトのコレクション Workbook オブジェクト Worksheet オブジェクトのコレクション Worksheet オブジェクト Cells プロパティ
|
【Pythonの最新記事】
- Python : shift_jis の3列の csv フォーマットのデータを ttk.Treeview に表示する
- Python : ttk.Treeview で表形式を使用して環境変数の一覧表示
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 1 )
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 4 ) : リダイレクトと関数とログ出力
- XAMPP + Python( 3.8 ) で WEBアプリの基礎部分構築 : その ( 3 ) : cgi.FieldStorage() から ディクショナリ
- XAMPP + Python( 3.8 ) でWEBアプリの基礎部分構築 : その ( 2 ) : QUERY_STRING と 画面定義
- Python + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- MySQL Connector/Python の使用方法概要のまとめ
- Python3 : 言語的デザインの特徴と要点
- Python ドキュメントに沿った、テキストファイル読み込みの理解
- Python3 でメール送信 ( さくらインターネット )
- Python 3.6 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました
- Eclipse + Python(Pydev) : pywin32(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新
- Eclipse + Python(Pydev) : MySQL Connector/Python でループ処理をしながら更新
- Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする
- Python 3.4 : インストールと最初にする事( Windows )
- Python3.x : URL を読み出す( bytes から string )
- Python3.1 : URLを読み出して、バイナリのままファイル出力する
- Python3.1 : クッキーを保持して二つの URL にアクセスする
- Python3.1 : URLを読み出してファイルに出力