![]()
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 list![]()
excel-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を読み出してファイルに出力






