🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

5351閲覧

Pyautoguiとopenpyxlでexcelを操作する(キーボードで3つのボタンを同時入力)

python01

総合スコア16

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/11 00:07

編集2021/02/15 13:25

■実現したい動作■

Pyautoguiとopenpyxlでexcelを自動操作させたいです。

行いたい操作は下記動作です。
excelにて、
・ctrl+shift+右ボタン同時押し
・ctrl+shift+下ボタン同時押し

上記操作で例えば10×10のセルを選択する。
(10×10のセル全てに文字などの情報が入力されている)

などの操作を行いたいです。

上記動作は動作ができる端末とできない端末があります。
次の「試した事」に違いの比較を行いました。(2月15日)

動作できない端末でも同様の動作を実現させたいです。

■試したこと 2月15日修正■

1.バージョン確認を行いました。
PythonとPyAutoGUIのみバージョンアップしています。
しかし、正常に動作しない端末は複数選択ができない状態です。

確認個所 正常に動作しない端末   正常に動作する端末
Python       3.8.5(3.7.6)      3.8.3
pip       20.2.4        21.0.1
PyAutoGUI    0.9.52(0.9.50)    0.9.52
opencv-python 4.4.0        4.4.0.46
端末のOS    win10 64bit win10 64bit
Excel       未確認         2019
※( )はバージョンアップ前

   
2.2通りのコードで試してみました。
いずれも正常に動作しない端末では、
選択したセルが動くだけの動作になります。
(複数セルの選択ができていない)

方法1

python

1import pyautogui as pgui 2import time 3 4pgui.hotkey('ctrl','home') #A1セルに移動 5 6##### 方法1 ################################ 7pgui.keyDown('ctrl') 8pgui.hotkey('shift','right') #同時押し 9pgui.hotkey('shift','down') 10pgui.keyUp('ctrl') 11############################################## 12 13##### 方法2 ################################ 14pgui.keyDown('shiftright') 15pgui.hotkey('ctrl', 'right') 16pgui.hotkey('ctrl', 'down') 17pgui.keyUp('shiftright') 18################################################ 19 20

■困っていること■

別のPCで動作させると、
選択しているセルは動きますが、セルの複数選択ができていません。
(右に10セル進んで、下に10セル進む。選択されているセルは一つのみ)


明日、バージョンUPで対応してみようと思いますが、
上記不具合がバージョン起因でない場合、
明日の対応時間が無駄になるため、事前に確認を取っておきたいです。

どなたか知見がある方がいらっしゃいましたら
ご教授の程よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2021/02/11 01:15 編集

Excelで、Ctrl+→キーやCtrl+↓キーは、シートの右端や下端までの移動になるので、「10x10のセルを選択する」という目的には合わないのでは?
python01

2021/02/11 01:20

質問の情報が不足しておりました。 元々10×10のセル内に数値が入っていることを想定しております。 その状態で「Ctrl+Shift+→」と「Ctrl+Shift+↓」で 10x10のセルを選択する動作を行いたいです。
Daregada

2021/02/11 01:29 編集

ああ、了解しました。
guest

回答2

0

自己解決

numlockがONの状態だとshift+right(left)が正常に動作しないようです。

下記回答を参考にさせて頂きました。
https://teratail.com/questions/254519

正常動作端末でnumlockをONにすると、
複数セル選択ができない状態になりました。

おそらく動作不良端末もこれで解決できると思われます。

追記)本日、正常に動作しない端末で試したところ、
numlockがOFFで複数セル選択ができるようになりました。

投稿2021/02/15 15:13

編集2021/02/16 14:14
python01

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Excelのシフトキーの扱いは特殊なようで、keyDown('shift')hotkey('shift', 'right')などでは、シフトキーが押された扱いになりませんでした。

同じことで悩んでいた人が、StackOverflowにもいました。

Why keyDown(shift) function is not working for python pyautogui for Excel Automation - Stack Overflow

それに対する回答によれば、左シフトキー(shiftleft)と右シフトキー(shiftright)を両方押した状態にすると、PyAutoGuiでExcelのシフトキーを使ったキー操作(範囲選択など)を行なえるようです。
なんじゃそりゃって感じですが、実際に手元で実験したところ、左右のシフトキーを両方押した状態にすることで操作が行なえました。

以下は、A1セルを基点として、10x10の範囲を選択するためのコードです。
補足: データが記入されているか不明だったので→キーと↓キーを9回押すコードを書きましたが、10x10の範囲にだけデータが記入済みなら、コメント化してあるCtrl+→キーとCtrl+↓キーを押すコードを使ってください。

Python

1import pyautogui as pg 2 3# pg.click(1, 1) # Excelのウィンドウを選択できる座標 4pg.sleep(1) 5 6pg.hotkey('ctrl', 'home') # シート左上にアクティブセルを移動 7 8# ExcelでShiftキーを押した状態にするにはこれが必要 9pg.keyDown('shiftleft') 10pg.keyDown('shiftright') 11 12# 現在のセルから9個右、9個下のセルまで順次移動して10x10のセルを選択 13pg.press(['right', 'down'], presses=9) 14# すでに10x10の範囲にデータが記入済みなら、↑をコメントにして↓を使えばOK 15# pg.hotkey('ctrl', 'right') 16# pg.hotkey('ctrl', 'down') 17 18# ExcelでShiftキーを離した状態にするにはこれが必要 19pg.keyUp('shiftright') 20pg.keyUp('shiftleft')

投稿2021/02/11 01:28

編集2021/02/11 01:34
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

python01

2021/02/11 01:47

ご丁寧な回答ありがとうございます。 pg.hotkey('ctrl', 'home') でシート左上に移動できることも 知らなかったので、大変勉強になります。 今から手元のPCでご教授頂いた方法を試してみようと思います。 一つ懸念しているのが、 手元のPCで正常に動作しても 別のPCだと正常に動作しないのでは? という懸念があります。 (今回の下記コードがそうでした。質問の試した事と同じコードです。) ```Python pgui.keyDown('ctrl') pgui.hotkey('shift','right') #同時押し pgui.hotkey('shift','down') pgui.keyUp('ctrl') ``` なので、何か別の要因もあるのではと危惧しております。
Daregada

2021/02/11 01:54

質問のコードが私のPCやStackOverflowの質問者のPCで動かなかったのと同様に、私のコードが別のPCで動かない可能性はありますよ。 そりゃ、「実際に動かして」確かめてみるしかない。動かなければ、「動かないPCで」原因を探ってください。 Excelのバージョンとか、OSのバージョンとか、PythonやPyAutoGuiのバージョンとか、原因はいろんなところにあるでしょう。 あなたの危惧なんですから、あなたが解決してください。
python01

2021/02/11 02:34

手元のPCで'shiftleft' を用いても正常に動作しました。 明日この手法でも試してみます。 ありがとうございます。 元々の質問の意図は ■困っていること■に 記入させて頂いた通り 「別のPCで動かない原因がわからない」です。 ご教授頂いた内容で明日試してみます。 ・手法の変更(shiftrightを用いる) ・Pythonのバージョンを一致させる ・PyAutoGuiバージョンを一致させる ←これは知らなかった ・OSのバージョン ←win10なので同じ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問