![]()
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 プロパティ




※ 列の ID は、視認性を上げる為に日本語の名称を使用しています。
( Apache 環境では、.py に対してソースコードの先頭の #!プログラム をcgi として実行します / PHP は別定義です )

※ エキスパートモードで表示しています
アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります


