![]()
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") と言うような記述方法も可能です
01.
import
win32com.client
02.
import
traceback
03.
import
sys
04.
import
os
05.
06.
ExcelApp
=
win32com.client.Dispatch(
"Excel.Application"
)
07.
# デバッグ時は、Excel の本体を表示させて状況が解るようにする
08.
ExcelApp.Visible
=
True
09.
# UI でチェックさせるようなダイアログを表示せずに実行する
10.
ExcelApp.DisplayAlerts
=
False
11.
12.
try
:
13.
# ****************************
14.
# ブック追加
15.
# ****************************
16.
Book
=
ExcelApp.Workbooks.Add()
17.
18.
# 通常一つのシートが作成されています
19.
Sheet
=
Book.Worksheets(
1
)
20.
21.
# ****************************
22.
# シート名変更
23.
# ****************************
24.
Sheet.Name
=
"Pythonの処理"
;
25.
26.
# ****************************
27.
# セルに値を直接セット
28.
# ****************************
29.
for
i
in
range(
1
,
11
):
30.
Sheet.Cells(i,
1
).Value
=
f
"処理 : {i}"
31.
32.
# ****************************
33.
# 1つのセルから
34.
# AutoFill で値をセット
35.
# ****************************
36.
Sheet.Cells(
1
,
2
).Value
=
"子"
37.
# 基となるセル範囲
38.
SourceRange
=
Sheet.Range(Sheet.Cells(
1
,
2
), Sheet.Cells(
1
,
2
))
39.
# オートフィルの範囲(基となるセル範囲を含む )
40.
FillRange
=
Sheet.Range(Sheet.Cells(
1
,
2
), Sheet.Cells(
10
,
2
))
41.
SourceRange.AutoFill(FillRange)
42.
43.
# ****************************
44.
# 保存
45.
# ****************************
46.
Book.SaveAs( os.getcwd()
+
"\\sample.xlsx"
)
47.
48.
except
Exception:
49.
ExcelApp.Quit()
50.
traceback.print_exc()
51.
sys.exit( )
52.
53.
54.
ExcelApp.Quit()
55.
(
"処理を終了します"
)
openpyxl で Autofill 無しの処理
01.
import
openpyxl
02.
import
traceback
03.
import
sys
04.
05.
try
:
06.
# ****************************
07.
# 新しいブックを作成
08.
# ****************************
09.
Book
=
openpyxl.Workbook()
10.
11.
# ****************************
12.
# 通常一つのシートが作成されています
13.
# ****************************
14.
Sheet
=
Book.worksheets[
0
]
15.
16.
# ****************************
17.
# シート名変更
18.
# ****************************
19.
Sheet.title
=
"Pythonの処理"
20.
21.
# ****************************
22.
# セルに値を直接セット
23.
# ****************************
24.
for
i
in
range(
1
,
11
):
25.
Sheet.cell(i,
1
, f
"処理 : {i}"
)
26.
27.
Sheet.merge_cells(
"C1:F1"
)
28.
Sheet.cell(
1
,
3
).value
=
"結合されたセル"
29.
30.
Book.save(
'sample.xlsx'
)
31.
32.
except
Exception:
33.
traceback.print_exc()
34.
sys.exit( )
35.
36.
(
"処理を終了します"
)
関連する記事
JScript : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する関連する Microsoft ドキュメント
Application オブジェクト Workbook オブジェクトのコレクション Workbook オブジェクト Worksheet オブジェクトのコレクション Worksheet オブジェクト Cells プロパティ
Python : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する
|