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

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

ただいまの
回答率

89.86%

PythonでExcelアプリケーションを閉じる方法を教えてください。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,801

YUKI_B

score 9

 前提・実現したいこと

Pythonでエクセルのアプリケーションを閉じたいのですが書き方がわかりません。

 発生している問題・エラーメッセージ

c:\python>python renshu9.py
Traceback (most recent call last):
  File "renshu9.py", line 16, in <module>
    book.Close('aaa.xlsx')
AttributeError: 'Workbook' object has no attribute 'Close'

 該当のソースコード

import subprocess
import openpyxl as px
import win32com.client

book = px.load_workbook('aaa.xlsx')
sheet = book.active

EXCEL = r'aaa.xlsx'

subprocess.Popen(['start',EXCEL], shell=True)
#
sheet.cell(row=1, column=3, value=13)

book.save('aaa.xlsx')

book.Close('aaa.xlsx')

 試したこと

sheetやbookには閉じるプログラムがないことは気付きましたが
どこを指定して閉じるのかがわかりません.

 補足情報(FW/ツールのバージョンなど)

Python3.7.1

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2018/11/22 11:38

    openpyxlで編集中に同じファイルをExcelで開いている(が、編集結果は反映されていない)意図は何でしょうか?本来やりたいことを記載すると適切な回答得られやすくなります。

    キャンセル

  • YUKI_B

    2018/11/22 11:44

    大変失礼いたしました。セーブ箇所のコメントアウトを解除していませんでした。

    キャンセル

回答 2

checkベストアンサー

0

book.Close()


ではなく

book.close()


ではないのか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/22 11:40

    回答いただきありがとうございます。。
    訂正しましたところ
    File "renshu13.py", line 16, in <module>
    book.close('aaa.xlsx')
    TypeError: close() takes 1 positional argument but 2 were given

    というエラーがでたのですが、これはどう対処すればよいのでしょうか?

    キャンセル

  • 2018/11/22 11:50

    book.close()だけでいいはずです。

    エラー内容を和訳してみましょう
    > TypeError: close() takes 1 positional argument but 2 were given
    >「close関数は任意の1つの引数を取るが、2つ与えられている」
    なので引数を一つ減らしてやります

    キャンセル

0

.closeではファイルパスは指定できませんし、修正した結果はファイルに反映されません。代わりに.saveを呼ぶ必要があります。

また、Pythonでエクセルのアプリケーションを閉じたい

startコマンドで起動したExcelアプリケーションおよび開かれたファイルは、Python側から終了することはできません。

本来やりたいことは以下のようなことでしょうか?

import openpyxl as px
#import win32com.client

# aaa.xlsxを開いて内容を修正する
EXCEL = r'aaa.xlsx'
book = px.load_workbook(EXCEL)
sheet = book.active
sheet.cell(row=1, column=3, value=13)
book.save(EXCEL) # 保存が必要!
#book.close()    # 不要

# 修正された内容をExcelで確認
# 起動したExcelはユーザーが自分で閉じること!
import subprocess
subprocess.Popen(['start',EXCEL], shell=True)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/22 12:05 編集

    回答いただきありがとうございます。

    今回の実験の主目的は"Pythonから指定したExcelファイルを開き、それを閉じることは可能かどうか"ということが知りたかったのです。
    詳細に話しますと今現状エクエルの表にスイッチを作り、そこからPythonのスクリプトを実行させ値を入力するというプログラムを作っています。
    しかし現状該当のエクセルが閉じていないと値が入力されません。
    対処方法がわからなかったので、Pythonプログラムの最初の方でエクセルを閉じ、
    最後に指定したプログラムを再起動させるというプロセスを考えて居ます。それの前段階として、この「Python経由でアプリケーションを閉じる」というテストプログラムを作成しようと考えていたところ、どうにもうまくいかなくて今回質問をさせていただきました。

    キャンセル

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

  • ただいまの回答率 89.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る