質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
xlwings

xlwingsは、ExcelをPythonで操作するためのオープンソースライブラリです。

Python

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

Q&A

解決済

2回答

784閲覧

Python, xlwings、Excelファイルを閉じたままデータ入力処理がしたい

ykasaf7

総合スコア10

xlwings

xlwingsは、ExcelをPythonで操作するためのオープンソースライブラリです。

Python

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

0グッド

0クリップ

投稿2024/07/04 01:51

実現したいこと

タイトルの通りになりますが、xlwingsライブラリでPythonプログラムを検討しています。
Excelファイルを閉じたままデータ入力処理がしたいと考えています。
openpyxlからxlwingsに変更したところ、処理速度が格段に遅いです。
これはExcelファイルを閉じたまま操作していることが起因していると考えています。

発生している問題・分からないこと

Excelマクロ有効ファイル(xlsm)にデータ書き込みを実行しています。
openpyxlの場合、VBAの保持は「keep_vba = True」のオプションでできることは確認しましたが、
プログラムにリンクさせたボタンが保持されないので、xlwingsに変更しました。

xlwingsの場合、ボタンや図形の保持は確認できましたが、openpyxlに比べて処理速度が遅いです。
xlwingsで処理速度向上を目指したいと考えています。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

chatGPTで「xlwingsライブラリの実行について、Excelファイルを閉じたままでもデータ入力できる方法を教えてください」と入れてみましたが、解決方法がありませんでした。

補足

特になし

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

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

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

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

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

maisumakun

2024/07/04 01:56

「Excelファイルを閉じたまま操作している」とは、どういう意味でしょうか?
can110
TakaiY

2024/07/04 03:48 編集

「閉じたまま」というのは「Excelを起動せずに」という意味でしょうか。 だとすると、xlwingsはpythonからExcelを制御(もしくはその逆)をするためのモジュールなので、できないと思います。 高速化ということであれば、どのような処理が遅いのか具体的に説明されるとアドバイス得やすいと思います
dodox86

2024/07/04 02:04

> openpyxlからxlwingsに変更したところ、処理速度が格段に遅いです。 > これはExcelファイルを閉じたまま操作していることが起因していると考えています。 「閉じたまま操作していることで遅い」と言うのは質問者であるykasaf7さんの推測ですね? それが当たっているとして、データ入力処理自体はできているのですから、 > Python, xlwings、Excelファイルを閉じたままデータ入力処理がしたい と言う質問自体の件名、つまり解決したいことおよび > chatGPTで「xlwingsライブラリの実行について、Excelファイルを閉じたままでもデータ入力できる方法を教えてください」と入れてみましたが、解決方法がありませんでした。 について、そもそも矛盾していませんでしょうか。端的に「xlwingsライブラリを使うと遅い」のが問題なのでは? あるいは、Excelファイルを開いてxlwingsライブラリを使うと速いのでしょうか。
ykasaf7

2024/07/04 02:18

<実現したいこと> ・Pythonの実行後にExcelマクロ有効ファイル(xlsm)のボタンが消えないようにしたい。 <確認済> ・openpyxlはVBAは保持されるが、VBAとリンクさせたボタンは消える。 ・xlwingsはVBAを保持し、ボタンも消えない ・xlwingsは処理速度が遅い。openpyxlの場合は5分程度で完了していたことがxlwingsは60分経過しても  まだ終わっていない。微妙なコマンドの違いはありますが、処理手順の変更はありません。 <解決したいこと> ・xlsmファイルのボタンを保持できる他のライブラリがあれば確認したい。 ・xlwingsしかない場合は処理速度向上ができる方法について、知見があれば教えて頂きたいです。
TakaiY

2024/07/04 02:20

実現したいことの最後の行の「閉じたまま」は「開いたまま」の間違えだと推測。
meg_

2024/07/04 03:14

> Excelファイルを閉じたままデータ入力処理がしたい 上記の理由は何でしょうか?プログラムを実行したいマシンにExcelが入っていないのでしょうか?
TakaiY

2024/07/04 03:48

> xlwingsで処理速度向上を目指したい ということかと
ykasaf7

2024/07/04 04:19

>> Excelファイルを閉じたままデータ入力処理がしたい >上記の理由は何でしょうか?プログラムを実行したいマシンにExcelが入っていないのでしょうか? いえ、違います。 Excelが起動していなければ、処理惣度が向上するだろうと踏んでいます
meg_

2024/07/04 10:03

場合によってはExcelVBAの方が向いている場合もあるかと思います。比較検討済であればスルーしてください。
bsdfan

2024/07/05 00:55

openpyxlでも5分かかっているということは相当な処理に思われます。 データ入力とのことですが、どれぐらいの数のデータを入力しているのでしょうか? 可能ならばコードを記載するのが一番ですが、それができないなら、どういった処理をしているのかを記載するとアドバイスがでてくるかもしれません。
ykasaf7

2024/07/05 04:36

>openpyxlでも5分かかっているということは相当な処理に思われます。 >データ入力とのことですが、どれぐらいの数のデータを入力しているのでしょうか? >可能ならばコードを記載するのが一番ですが、それができないなら、どういった処理をしているのかを記>載するとアドバイスがでてくるかもしれません。 コードは業務内容に関する部分が多いので記載できません。すみません。 ファイルA:50列×50000行 ファイルB:10列×10000行 ファイルAのC列セルとファイルBのC列セルを確認して、 AとBで一致or不一致によって、分岐処理を実行するプログラムです。 上記とは別の処理をすでにVBAで作成されていて、このVBAのプログラムは使い続けるので プログラムとリンクしたボタンはPythonの実行前後で保持しておきたいと考えています。 VBAの経験値は低いので、Pythonで検討する方が早いかなと思っています。
bsdfan

2024/07/05 05:17

回答についていますが、これだけのデータを個別で読み込んでいたら時間がかかりそうなので、バルクでリスト、配列、データフレーム等に読み込むようにして、書き込みも一回でまとめてやるようにすればいいのかもしれません。 個人的には、これだけの大きさのデータをxlsmで管理・更新するというやり方がそもそもしんどいんじゃないかと思います。
ykasaf7

2024/07/12 08:28

>回答についていますが、これだけのデータを個別で読み込んでいたら時間がかかりそうなので、バルクで >リスト、配列、データフレーム等に読み込むようにして、書き込みも一回でまとめてやるようにすればい >いのかもしれません。 >個人的には、これだけの大きさのデータをxlsmで管理・更新するというやり方がそもそもしんどいんじ >ゃないかと思います。 コメントありがとうございます。 私自身、勉強不足が多々ありますので検討してみます。
guest

回答2

0

ベストアンサー

https://docs.xlwings.org/en/latest/datastructures.html#codecell5

Try to minimize the number of interactions with Excel. It is always more efficient to do sheet.range('A1').value = [[1,2],[3,4]] than sheet.range('A1').value = [1, 2] and sheet.range('A2').value = [3, 4].


sheet['A10'].value = [['Foo 1', 'Foo 2', 'Foo 3'], [10, 20, 30]]

で済むところを

sheet['A10'].value = 'Foo 1' sheet['A11'].value = 'Foo 2' sheet['A12'].value = 'Foo 3' sheet['B10'].value = 10 sheet['B11'].value = 20 sheet['B12'].value = 30

と遅くなるような処理をわざわざ自分で書いているという可能性はない?

(コードを質問に書かない理由は?)

投稿2024/07/04 04:53

quickquip

総合スコア11209

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

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

ykasaf7

2024/07/05 04:47

回答ありがとうございます。 処理するデータ量が膨大過ぎるのが最大の原因ですので、処理条件を見直してみます。 あと、xlwingsの理解が不足していますので、コメント内容も含めて勉強します。 参照ページを教えて頂き、ありがとうございます。
guest

0

Excelが起動していなければ、処理惣度が向上するだろうと踏んでいます

xlwingsは、pythonからExcelを制御、もしくはその逆、をするためのモジュールなので、できないと思います。

目的が高速化のようですので、どのような処理が遅いのか具体的に説明されるとアドバイス得やすいと思います

投稿2024/07/04 04:46

TakaiY

総合スコア13687

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

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

ykasaf7

2024/07/05 04:49

Pythonではなく、VBAも視野に入れて検討しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問