この質問は以前に尋ねられたと思いますが、明確ではありません。元の質問では、ユーザーがMac用ではなくWindowsの実行可能拡張機能であるexcel.exeを提供しました。
- MAC上のPythonで新しいExcelインスタンスを開く必要があります。
どのモジュールをインポートする必要がありますか?
私はPython言語の学習を完了した初心者ですが、ドキュメントを理解するのに苦労しています。
Excelを起動するだけの場合、LaunchServicesを使用して起動するのが最善の方法です。
持っている場合PyObjC
(Appleが10.6以降にプレインストールしているPythonを使用している場合はこれを行います。それ以外の場合は、インストールする必要があります):
import Foundation
ws = Foundation.NSWorkspace.sharedWorkspace()
ws.launchApplication_('Microsoft Excel')
そうでない場合は、いつでもopen
ツールを使用できます。
import subprocess
subprocess.check_call(['open', '-a', 'Microsoft Excel'])
どちらの方法でも、ユーザーがFinderでアプリアイコンをダブルクリックした場合と同じように、Excelを効果的に起動できます。
特定のドキュメントを開くなどの単純なことをExcelに実行させたい場合、それはそれほど難しくありません。NSWorkspace
またはドキュメントを見open
て、やりたいことを行う方法を確認してください。
実際にExcelを制御したい場合(たとえば、ドキュメントを開いて変更を加えて保存したい場合)は、AppleScriptインターフェイスを使用することをお勧めします。
これを行うためのAppleの推奨される方法は、を介するScriptingBridge
か、または2言語アプローチを使用することです(AppleScriptを記述し、を介して実行します。NSAppleScript
これは、Pythonではを介して行いますPyObjC
)。ただし、おそらく使用します(ここappscript
からコードを取得します)。それは元の作成者によって放棄され、まばらにしか維持されておらず、おそらく最終的には将来のOS Xバージョンでの動作を停止するという事実にもかかわらず、公式のソリューションよりもはるかに優れています。
これがサンプルです(私はここにExcelを持っていないので、テストされていません):
import appscript
excel = appscript.app('Microsoft Excel')
excel.workbooks[1].column[2].row[2].formula.set('=A2+1')
コメントから、Excelファイルをデータで「更新」する必要があるかどうかは完全には明らかではなく、Excelが必要であると想定するか、新しいデータを含めるために一部のExcelファイルを変更する必要があると想定します。
通常、Excelを起動せずにExcelファイルを「更新」する方がはるかに簡単で、確かに高速です(実行速度が異なります)。ただし、更新は正しい言葉ではありません。ファイルを読み込んで、新しく書き出す必要があります。もちろん、元のファイルを上書きできるので、更新のように見えます。
使用するファイルがファイル(Excel 2003)の場合、 「更新」にはトリオを使用できxlrd
ます。xlwt
xlutils
.xls
IIRC xlwtは.xlsx
書き込みをサポートしていません(ただし、xlrd
これらのファイルを読み取ることはできます)。
.xlsx
私が使用するファイルの場合openpyxl
、
どちらも、データ、数式、基本的な書式設定などを書くのに十分です。
上記のパッケージのいずれかを使用して読み取り/書き込みを行うと失われる情報を含む「テンプレート」として使用する既存のExcelファイルがある場合は、 Excelでファイルを更新する必要があります。Visual Basicマクロと、クライアントによって指定された非常に特殊なフォーマットを含める簡単な方法がなかったため、そうしなければなりませんでした。また、スプレッドシートを視覚的に設定してから、プログラムでセルに入力する方が簡単な場合もあります。しかし、これはすべてWindowsで行われました。
MacでExcelを駆動する必要がある場合は、既存のファイルをテンプレートとして使用する必要があるため、Applescriptを確認することをお勧めします。または、オプションの場合は、OpenOffice /LibreOfficePyUnoインターフェイスを確認してください。